Einzelnen Beitrag anzeigen

HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
972 Beiträge
 
Delphi 6 Professional
 
#4

AW: Auto logout nach Zeit

  Alt 7. Apr 2022, 20:22
Hmm..

Wenn Du auf Tastendruck oder Mausbewegung reagieren willst, welche außerhalb deiner App erfolgen, dann wirst Du nicht um einen Low-Level Hook herum kommen....
In einer Schleife/Timer den letzten Tastendruck abzufragen ist unschön


Hier mal ein Schnipsel:

Delphi-Quellcode:
type
  tagKBDLLHOOKSTRUCT = record
    vkCode: DWORD;
    scanCode: DWORD;
    flags: DWORD;
    time: DWORD;
    dwExtraInfo: DWORD;
  end;
  TKbdDLLHookStruct = tagKBDLLHOOKSTRUCT;
  PKbdDLLHookStruct = ^TKbdDLLHookStruct;

var
  HookHandle : HHOOK;
  WindowHandle : Hwnd;

function LowLevelKeyboardProc(nCode: Integer; wParam: wParam;
    lParam: lParam): LRESULT; stdcall;
  var vkCode: Cardinal;
begin
  if (nCode >= 0) and (wParam = WM_KEYDOWN) then
  begin
    vkCode := PKbdDLLHookStruct(lParam)^.vkCode;
    Form1.Memo1.Lines.Add('vkCode ' + IntToStr(PKbdDLLHookStruct(lParam)^.vkCode));
    Form1.Memo1.Lines.Add('scanCode ' + IntToStr(PKbdDLLHookStruct(lParam)^.scanCode));
    Form1.Memo1.Lines.Add('flags ' + IntToStr(PKbdDLLHookStruct(lParam)^.flags));
    Form1.Memo1.Lines.Add('time ' + IntToStr(PKbdDLLHookStruct(lParam)^.time));
    Form1.Memo1.Lines.Add('dwExtraInfo ' + IntToStr(PKbdDLLHookStruct(lParam)^.dwExtraInfo));
    // meine Anweisungen
    PostMessage(WindowHandle, WM_SYSKEYDOWN, vkCode, lParam);

  end;
  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
end;

function InstallHook(Hwnd: Cardinal): Boolean;
begin
  Result := False;
  if HookHandle = 0 then
  begin
    HookHandle := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, 0, 0);
    WindowHandle := Hwnd;
    Result := HookHandle <> 0;
  end;
end;

function UninstallHook: Boolean;
begin
  Result := UnhookWindowsHookEx(HookHandle);
  HookHandle := 0;
end;
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat