Keine einer eine Idee?
Auch hätte ich noch eine Frage wegen Globalen Hooks und Shell!
Ich mache in einer
DLL einen globalen Keyboard Hook um meine Form anzeigen zu können:
Delphi-Quellcode:
function SetHookKeyBoard(WinHandle: HWND; MsgToSend: Integer;KeyBoardArray : Array of TKeyBoard): Boolean; stdcall;
var
i : Integer;
begin
Result := False;
if (MMFDataKeyBoard = nil) and (MMFHandleKeyBoard = 0) then
begin
MMFHandleKeyBoard := CreateMMF(MMFNameKeyBoard, SizeOf(TMMFDataKeyBoard));
if MMFHandleKeyBoard <> 0 then
begin
MMFDataKeyBoard := MapMMF(MMFHandleKeyBoard);
if MMFDataKeyBoard <> nil then
begin
MMFDataKeyBoard.WinHandle := WinHandle;
MMFDataKeyBoard.MsgToSend := MsgToSend;
//get Array for shortcuts from the application
for i := 0 to High(KeyBoardArray) do begin
MMFDataKeyBoard.HandleHook[i].car1 := KeyBoardArray[i].car1;
MMFDataKeyBoard.HandleHook[i].car2 := KeyBoardArray[i].car2;
MMFDataKeyBoard.HandleHook[i].car3 := KeyBoardArray[i].car3;
end;
MMFDataKeyBoard.NextHook := SetWindowsHookEx(WH_GETMESSAGE, MsgFilterFuncKeyBoard, HInstance, 0);
if MMFDataKeyBoard.NextHook = 0 then
UnMapAndCloseMMFKeyBoard
else
Result := True;
end
else
begin
CloseMMF(MMFHandleKeyBoard);
MMFHandleKeyBoard := 0;
end;
end;
end;
end;
Das funktioniert so ganz gut, aber....
Wenn nun meine EXE als Shell geladen wird und kein Programm Fenster (egal ob Notepad, Taskmanager,...) sichtbar ist geht der Hook nicht!?
Sozusagen bei ganz leeren Desktop (nur Hintergrund zu sehen). Öffne ich dann den Taskmanager geht der Hook wieder!?