Momenteel ben ik bezig aan een programma'tje dat de multimediaknopjes van een toetsenbord af moet vangen. Eerst hook ik gewoon een procedure:
waarbij de thread op 0 staat voor globale afvanging. Vervolgens heb ik:
Afijn, ipv form1.print doet ie dan een sendmessage naar winamp. Het werkt, maar het vreemde is, als ik dan bij het hooken de threadid op het nummer van de app (App.ThreadID) zet, werkt het vlekkeloos. Maar zodra ik die op 0 zet, zodat het ook overal werkt, doet ie het maar tijdelijk. Soms na een paar keer op knopje drukken, soms na 10 keer, soms na een tijdje niks doen, in ieder geval blijft het niet werken. Wat kan hier nou eigenlijk fout zijn? Als ik em afvang, geef ik als return waarde 1, en zoniet doe ik CallNextHookEx. Ook kwam ik met de search erachter dat callbacks ophouden als een nieuwe callback komt terwijl de oude nog bezig is, maar dat is hier ook niet het geval want het is heel weinig code.
code:
1
| hHook = SetWindowsHookEx(WH_SHELL, AddressOf KeyboardProc, App.hInstance, 0) |
waarbij de thread op 0 staat voor globale afvanging. Vervolgens heb ik:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| Public Function KeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If idHook = HSHELL_APPCOMMAND Then
Select Case (lParam And &HFFF0000) / &H10000
Case APPCOMMAND_MEDIA_PLAY_PAUSE:
Form1.Print "raak gedrukt"
KeyboardProc = 1
Exit Function
End Select
End If
'call the next hook
KeyboardProc = CallNextHookEx(hHook, ByVal idHook, ByVal wParam, ByVal lParam)
'End If
End Function |
Afijn, ipv form1.print doet ie dan een sendmessage naar winamp. Het werkt, maar het vreemde is, als ik dan bij het hooken de threadid op het nummer van de app (App.ThreadID) zet, werkt het vlekkeloos. Maar zodra ik die op 0 zet, zodat het ook overal werkt, doet ie het maar tijdelijk. Soms na een paar keer op knopje drukken, soms na 10 keer, soms na een tijdje niks doen, in ieder geval blijft het niet werken. Wat kan hier nou eigenlijk fout zijn? Als ik em afvang, geef ik als return waarde 1, en zoniet doe ik CallNextHookEx. Ook kwam ik met de search erachter dat callbacks ophouden als een nieuwe callback komt terwijl de oude nog bezig is, maar dat is hier ook niet het geval want het is heel weinig code.