Hallo,
ich will bei einer Maschine mit einem Industrie-PC (Emb. Win XP) verhindern, dass dieser herunterfährt, wenn man den Netzschalter (auf der Front) drückt.
Bisher habe ich herausgefunden, dass das Event WM_POWERBROADCAST heißt und nur an die Top-Level-Anwendungen verschickt wird, weshalb ich bei meinem Programm einen global hook installieren muss.
Dafür habe ich dieses Tutorial verwendet:
http://www.delphi-treff.de/tutorials...tastatur-hooks
In meiner
.exe wird im FormCreate InstallHook aufgerufen sowie in FormDestroy UninstallHook, die beide aus der
.dll vom Tutorial stammen:
Delphi-Quellcode:
library KeyboardHook;
uses
Windows,
Messages;
var
HookHandle: Cardinal = 0;
WindowHandle: Cardinal = 0;
function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM):
LRESULT; stdcall;
begin
Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
case nCode < 0 of
TRUE: exit;
FALSE:
begin
sleep(10);
end;
end;
end;
function InstallHook(Hwnd: Cardinal): Boolean; stdcall;
begin
Result := False;
if HookHandle = 0 then begin
HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc,
HInstance, 0);
WindowHandle := Hwnd;
Result := TRUE;
end;
end;
function UninstallHook: Boolean; stdcall;
begin
Result := UnhookWindowsHookEx(HookHandle);
HookHandle := 0;
end;
exports
InstallHook,
UninstallHook;
end.
Kompiliere ich dann beides zusammen und drücke den Netzschalter, passiert nichts.
Wenn ich einen zusätzlichen Button mache, der WM_POWERBROADCAST sendet
SendMessage(HWNC_BROADCAST,WM_POWERBROADCAST,0,0)
passiert auch nichts.
Wo liegt mein Fehler?
Oder muss man einen anderen Weg nehmen?
Gruß