Einzelnen Beitrag anzeigen

rakekniven

Registriert seit: 4. Apr 2008
Ort: Franken
82 Beiträge
 
Delphi XE5 Professional
 
#1

PowerButton-Event von Windows abfangen und auswerten

  Alt 28. Jul 2009, 15:43
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ß
Frag google
  Mit Zitat antworten Zitat