In der erwähnten Rountine zum 'Abschiessen' des Screen-Savers verwende ich die Komponente wie folgt:
Code:
procedure TForm1.BLKillerExecute(Sender: TObject; Params: Pointer);
var hDeskWnd : HDESK;
var Inp : TInput;
begin
hDeskWnd := OpenDesktop('Screen-saver', 0, false, MAXIMUM_ALLOWED);
if hDeskWnd <> 0 then
begin
if SetThreadDesktop(hDeskWnd) then
begin
Inp.Itype := INPUT_KEYBOARD;
Inp.ki.wVk := Ord('A');
Inp.ki.dwFlags := 0;
SendInput(1, Inp, SizeOf(Inp));
Inp.Itype := INPUT_KEYBOARD;
Inp.ki.wVk := Ord('A');
Inp.ki.dwFlags := KEYEVENTF_KEYUP;
SendInput(1, Inp, SizeOf(Inp));
Application.ProcessMessages;
Sleep(80);
end;
CloseDesktop(hDeskWnd);
end
else
PostMessage(GetForegroundWindow(), WM_CLOSE, 0, 0);
end;
Wenn das geht, heisst das nicht, dass eine Nachrichtenschleife vorhanden ist?