Mistero assoluto nonché inspiegabile

di il
1 risposte

Mistero assoluto nonché inspiegabile

Programma che tra le altre cose esegue un hook a basso livello di tastiera e mouse, al fine di bloccare e programmare alcuni tasti di mouse e tastiera con un bel e.Handled = True.

L' hook di tastiera funziona senza problemi. L' hook del mouse funziona bene, ma presenta un problema che trovo inspiegabile: se premo il tasto destro del mouse o i button X1 e X2 su qualsiasi finestra del desktop NON in primo piano... il thread lanciato di blocca e SI BLOCCANO TUTTI I TIMERS.TIMER DEL PROGRAMMA !! Ma che c' entrano i Timers.Timer??????

La cosa è tanto più inspiegabile in quanto eseguo il controllo dell' hook su un altro thread! (che poi è stato un ulteriore tentativo che tutto sommato viene utile in caso di controllo hook prolungato: il problema non cambia anche sullo stesso thread).
   Private Sub CheckMouse_MouseDown(sender As Object, e As CheckMouseHndl) Handles CheckMouse.MouseDown
        Dim MD As New CheckMyMouse                      'la Classe dove eseguo controlli e azioni
        Dim Flag As New Thread(Sub() MD.MouseDown(e))   'uso la Sub() perché devo passare un parametro
        Flag.Start()
        Debug.Print("Fine del thread start")         'non ci arrivo!!!!
    End Sub

    Private Sub CheckMouse_MouseUp(sender As Object, e As CheckMouseHndl) Handles CheckMouse.MouseUp
        Debug.Print("Il mouse è stato sollevato e Timer1.Enabled è: " & Timer1.Enabled)
    End Sub
A questo punto vi chiederete... si, ma il codice da elaborare?? Ebbene, togli qui togli là per cercare il problema... il codice è rimasto questo:
  Friend Sub MouseDown(e As CheckMouseHndl)
     Try
	Return
     Finally
        Debug.Print("Sono arrivato al Finally dopo aver premuto: " & e.Button.ToString)
     End Try
  End Sub
non c' è nulla ma se premo tasto destro su una qualsiasi finestra del desktop NON IN PRIMO PIANO ecco il codice che ricevo:
Sono arrivato al Finally dopo aver premuto: Right
Cioè non ricevo il messaggio di MouseUp, e AL LIMITE ci sta, ma non ricevo nemmeno il messaggio di fine thread anche se il Finally viene rilevato!

Fermo restando che anche se si bloccano tutti i timers del programma l' hook continua a funzionare e ricevere input da mouse.

Al momento l' unica cosa certa è che se PRIMA nella finestra premo Left e poi premo Right non ci sono problemi. Inoltre se a timers bloccati premo un bel Left dopo un Right "blocca-tutto"... i Timers si riattivano in automatico e tutto torna a funzionare senza problemi.

1 Risposte

  • Re: Mistero assoluto nonché inspiegabile

    phil2000 ha scritto:


    se premo il tasto destro del mouse o i button X1 e X2 su qualsiasi finestra del desktop NON in primo piano... il thread lanciato di blocca e SI BLOCCANO TUTTI I TIMERS.TIMER DEL PROGRAMMA !! Ma che c' entrano i Timers.Timer??????
    Non sapendo

    1) come è stato implementato questo hook e a che scopo,
    2) cosa fanno di preciso i Timer

    risulta difficile fare ipotesi su cosa possa accedere, al netto che il codice postato sembra poco chiaro nell'illustrazione di ciò che si sta verificando.
Devi accedere o registrarti per scrivere nel forum
1 risposte