ManOMan.. bin am verzweifeln!
Das mit den Globalen Variabeln und MMF habe ich hinbekommen, aber nicht das Problem dass die MsgFilterFunc auch auf die eigenen keybd_events reagiert!
Habe versucht den Hook vor dem Keyboard Event aufzulösen. Das bringt aber auch nichts -> Endlosschleife!
z.B. Ich fange vom 1. Programm ein "Up" ab, dass für Programm 2 bestimmt gewesen wäre. Dann sende ich das "Up" an Program 3 das ich zuerst in den Vordergrund geholt habe!
Kann mir da nochmal jemand Helfen!?
Code:
//ein Tasten Shorcut z.B. Up -> Up, Esc -> Enter, Enter -> Enter,...
if ((TPMsg(lParam)^.wParam = HandleHook[x].car3)
and (HandleHook[x].car4 = 0)
and (HandleHook[x].car5 = 0)) then // 1. Cardinal
begin
if TPMsg(lParam)^.message = WM_KEYDOWN then// Taste unten
begin
TPMsg(lParam)^.message := WM_NULL; //Originale Message löschen
Result := CallNextHookEx(MMFData.NextHook, Code, wParam, lParam);
ClearTempArray(HandleHook); //HandleHook[x].car3.. bis car5 auf 0 setzen damit oben nicht mehr auf einen Tastendruck reagiert wird
SetForeGroundWIndow(MMFData.ProgramHandle);
keybd_event(HandleHook[x].car1, 0, 0, 0);
if not (HandleHook[x].car2 = 0) then begin
keybd_event(HandleHook[x].car2, 0, 0, 0);
keybd_event(HandleHook[x].car1, 0, KEYEVENTF_KEYUP,0);
keybd_event(HandleHook[x].car2, 0, KEYEVENTF_KEYUP,0);
end
else keybd_event(HandleHook[x].car1, 0, KEYEVENTF_KEYUP,0);
//Messagebox(0, PChar(HandleHook[x].str1), 'H O O K 1', 0);
Kill := True;
CopyBackTempArray(); //HandleHook[x].car3.. bis car5 wieder auf Original Shortcut Kombination zurücksetzen
Break;
end;
end
....
..
.