Registriert seit: 4. Apr 2008
400 Beiträge
|
Re: Simulierten Hotkey per WMHotKey abfangen?
21. Apr 2008, 17:34
Hab jetzt alles dynamisch gelöst:
Code:
//ein Tasten Shorcut
if (TPMsg(lParam)^.wParam = HandleHook[i].car3) and (HandleHook[i].car4 = 0) and (HandleHook[i].car5 = 0) then // 1. Cardinal
begin
if TPMsg(lParam)^.message = WM_KEYDOWN then// Taste unten
begin
SetForeGroundWIndow(WindowHandle);
keybd_event(HandleHook[i].car1, 0, 0, 0);
if not (HandleHook[i].car2 = 0) then begin
keybd_event(HandleHook[i].car2, 0, 0, 0);
keybd_event(HandleHook[i].car1, 0, KEYEVENTF_KEYUP,0);
keybd_event(HandleHook[i].car2, 0, KEYEVENTF_KEYUP,0);
end
else keybd_event(HandleHook[i].car1, 0, KEYEVENTF_KEYUP,0);
Messagebox(0, PChar(HandleHook[i].str1), 'H O O K', 0);
Kill := True;
end;
end
//zwei Tasten Shorcut
else if (GetKeyState(HandleHook[i].car3)< 0) and (HandleHook[i].car4 <> 0) and (HandleHook[i].car5 = 0) then // 1. Cardinal
begin
if TPMsg(lParam)^.wParam = HandleHook[i].car4 then // 2. Cardinal
begin
if TPMsg(lParam)^.message = WM_KEYDOWN then// Taste unten
begin
SetForeGroundWIndow(WindowHandle);
keybd_event(HandleHook[i].car1, 0, 0, 0);
if not (HandleHook[i].car2 = 0) then begin
keybd_event(HandleHook[i].car2, 0, 0, 0);
keybd_event(HandleHook[i].car1, 0, KEYEVENTF_KEYUP,0);
keybd_event(HandleHook[i].car2, 0, KEYEVENTF_KEYUP,0);
end
else keybd_event(HandleHook[i].car1, 0, KEYEVENTF_KEYUP,0);
Messagebox(0, PChar(HandleHook[i].str1), 'H O O K', 0);
Kill := True;
end;
end;
end
//drei Tasten Shorcut
else if (GetKeyState(HandleHook[i].car3)< 0) and (GetKeyState(HandleHook[i].car4)< 0) then // 1. + 2. Cardinal
begin
if TPMsg(lParam)^.wParam = HandleHook[i].car5 then // 3. Cardinal
begin
if TPMsg(lParam)^.message = WM_KEYDOWN then// Taste unten
begin
SetForeGroundWIndow(WindowHandle);
keybd_event(HandleHook[i].car1, 0, 0, 0);
if not (HandleHook[i].car2 = 0) then begin
keybd_event(HandleHook[i].car2, 0, 0, 0);
keybd_event(HandleHook[i].car1, 0, KEYEVENTF_KEYUP,0);
keybd_event(HandleHook[i].car2, 0, KEYEVENTF_KEYUP,0);
end
else keybd_event(HandleHook[i].car1, 0, KEYEVENTF_KEYUP,0);
Messagebox(0, PChar(HandleHook[i].str1), 'H O O K', 0);
Kill := True;
end;
end;
end;
Hirmit kann ich 1, 2 & 3 Tasten-Codes abfangen.
Nun Fange ich z.B. die Tast "ESC" ab. Geht auch super!
Mein Problem ist nun wenn ich aus:
Abfangen -> Weiterschicken
ESC -> Enter
Enter -> Enter
mache, verfängt sich die Schleife natürlich in eine Endlosschleife wenn ich nun "Esc" drücke!
Sinn der Sache ist:
Ich habe 3 Programme, Prog1 sendet an Prog2 einen Shortcut. Dieser soll jedoch abgefangen werden und an Prog3 geschickt werden.
Muss ich da jetzt jedesmal bevor ich ein keybd_event auslöse den Hook wieder auflösen damit es sich nicht endlos in der Schleife verfängt?
EDIT:
zusätzlich habe ich herausgefunden, dass die Variable "HandleHook[i]", die Global definiert ist meinen Hook auf nurmehr Lokal verändert!
Wie kann ich das noch übergehen, denn die Array HandleHook wird in einer anderen Funktion bei SetHook erst aufgefüllt.
|