Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi mit peekmessages keyboardqueue abrufen (https://www.delphipraxis.net/47526-mit-peekmessages-keyboardqueue-abrufen.html)

Flocke 15. Jun 2005 13:28

Re: mit peekmessages keyboardqueue abrufen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab' mal ein bisschen herumgespielt - bei mir geht's mit WH_KEYBOARD auch nicht :(

... aaaaaber ...

mit WH_KEYBOARD_LL geht's :), und da braucht man noch nicht einmal eine DLL für.

Delphi-Quellcode:
const
  WH_KEYBOARD_LL = 13;

type
  PKbDllHookStruct = ^TKbDllHookStruct;
  TKbDllHookStruct = packed record
    vkCode: Cardinal;
    scanCode: Cardinal;
    flags: Cardinal;
    time: Cardinal;
  end;

function LLKeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  if nCode = HC_ACTION then
    with PKbDllHookStruct(lParam)^ do begin
      // ... dein Code
    end;

  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
end;
Die Hook-Prozedur hat denselben Aufbau (nCode, wParam, lParam), aber diesmal zeigt lParam auf eine TKbDllHookStruct-Struktur. Da kannst du mit vkCode direkt den virtuellen Keycode auslesen. flags hat in den Bits 0-7 denselben Inhalt wie lParam bei WM_KEYxxx-Meldungen in den Bits 24-31 (siehe SDK-Doku).


Nachtrag: Für die, die damit etwas herumspielen möchten, habe ich ein kleines Beispielprojekt angehängt.

DGL-luke 15. Jun 2005 16:42

Re: mit peekmessages keyboardqueue abrufen
 
DANKE!

das ist es! es funktioniert wunderbar! aber wohl nur unter W200/XP :|

naja, was solls. ist ja auch nichts sicherheitskritisches.

Flocke 15. Jun 2005 17:47

Re: mit peekmessages keyboardqueue abrufen
 
Die Basisinfo habe ich hier gefunden.

Da steht übrigens auch, dass ein globaler Hook mit WH_KEYBOARD (ohne _LL) unter Windows 9x sehr wohl gehen soll, ohne dass die Routine in einer DLL liegt. Verifizieren kann ich das aber mangels Installation nicht.

Das würde aber immer noch nicht dagegen helfen, dass man mit dem normalen Hook nur den eigenen Prozess überwachen kann, obwohl man ihn als globalen Hook installiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz