Ik heb een applicatie waarvoor het makkelijk is om een windows keyhook te gebruiken: het moet gebruikt worden tijdens presentaties en als het programma open staat moet het programma ook alle toetsen eerst zelf binnenkrijgen voor het deze eventueel verder door laat.
So far so good, werkt allemaal redelijk, ik krijg de toetsen binnen via een dll welke de feitelijke keyhook is, ook de communicatie met het programma in Delphi verloopt zonder verdere problemen, maar nu wil ik eigenlijk de toetsen bufferen. Ik krijg het echter niet voor elkaar om de toetsen event-driven naar het hoofdprogramma te sturen en heb dus een timertje om te kijken of er een toets binnengekomen is. Ik maak gebruik van een string waarin ik de keycodes als char opsla. Om een fifo idee te krijgen delete ik na verwerking het eerste caracter.
Dit is de code ervan:
het stuk code lpHookRec^.KeyBuffer := bufferstring; levert een in invalid pointer operation op... ik mag er blijkbaar zo niet naar toe schrijven...
Heeft iemand een oplossing of een alternatief voor mijn probleem?
So far so good, werkt allemaal redelijk, ik krijg de toetsen binnen via een dll welke de feitelijke keyhook is, ook de communicatie met het programma in Delphi verloopt zonder verdere problemen, maar nu wil ik eigenlijk de toetsen bufferen. Ik krijg het echter niet voor elkaar om de toetsen event-driven naar het hoofdprogramma te sturen en heb dus een timertje om te kijken of er een toets binnengekomen is. Ik maak gebruik van een string waarin ik de keycodes als char opsla. Om een fifo idee te krijgen delete ik na verwerking het eerste caracter.
Dit is de code ervan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| declaratie:
THookRec = packed record
TheHookHandle : HHOOK;
TheAppWinHandle : HWND;
TheCtrlWinHandle : HWND;
TheKeyCount : DWORD;
ShiftPressed : bool;
KeyBuffer : string;
end;
in het timer event:
procedure TMainApplication.KeyboardHookTimerTimer(Sender: TObject);
var i : integer;
bufferstring : string;
key : cardinal;
begin
//buffer verwerken
if lpHookRec^.KeyBuffer <> '' then
begin
bufferstring := lpHookRec^.KeyBuffer;
while length(bufferstring) > 0 do
begin
key := ord(bufferstring[1]);
ProjectorScreen.VerwerkKeyboardMessages(key);
Delete(bufferstring, 1, 1);
lpHookRec^.KeyBuffer := bufferstring;
end;
end;
Label1.Caption := IntToStr(lpHookRec^.TheKeyCount) + ' Keys Logged';
end; |
het stuk code lpHookRec^.KeyBuffer := bufferstring; levert een in invalid pointer operation op... ik mag er blijkbaar zo niet naar toe schrijven...
Heeft iemand een oplossing of een alternatief voor mijn probleem?
[ Voor 3% gewijzigd door jopiek op 03-08-2005 15:55 ]
Cogito Ergo Credo