AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Globaler Tastaturhook für eine bestimmte Tastatur
Thema durchsuchen
Ansicht
Themen-Optionen

Globaler Tastaturhook für eine bestimmte Tastatur

Ein Thema von Exceeder · begonnen am 21. Sep 2022 · letzter Beitrag vom 23. Sep 2022
 
Exceeder

Registriert seit: 29. Mai 2006
24 Beiträge
 
#1

Globaler Tastaturhook für eine bestimmte Tastatur

  Alt 21. Sep 2022, 20:26
Hallo,

ich würde gerne über einen globalen Tastaturhook die Eingaben einen bestimmten Tastatur auswerten. Speziell habe ich hier so einen RFID-Reader, welcher sich als Tastatur ausgibt. Die Alternative könnte sein, diesen Reader direkt via USB irgendwie auszulesen. Dafür fehlt mir aktuell leider noch das Wissen. Falls das eine nicht geht, wäre das also auch eine gute Option. Es gibt auf der verlinkten Seite ein kleines Tool, mit dem man ein paar wenige Optionen des Readers anpassen kann.

Der Reader sendet 10 Zeichen (0-9), welche der ID der Karte entspricht und dann ein Return. Man kann das auf HEX oder so umstellen, aber das löst das Problem noch nicht so richtig. Die Zeichen zu lesen ist kein Problem, allerdings dürfen diese dann auch nicht einfach in anderen Eingabecontrols landen. Man kann dem Reader leider auch nicht mitteilen, dass man ein spezielles Anfangszeichen braucht. Die Option "Add user-defined byte" aus der Software hat leider keine Funktion.

Der Code hier funktioniert soweit, leider bekommt halt jedes Eingabecontrol welches gerade zufällig Aktiv ist den Code ebenfalls.

Code:
unit RfidTest;

interface

implementation

uses
  Winapi.Windows, Winapi.Messages;

var
  GlobalKeyboardHook: HHOOK;
  RfidCode: string;


function KeyboardHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
type
  PKeyboardLowLevelHookStruct = ^TKeyboardLowLevelHookStruct;
  TKeyboardLowLevelHookStruct = record
    KeyCode: Cardinal;
    ScanCode: Cardinal;
    Flags: Cardinal;
    Time: Cardinal;
    ExtraInfo: Cardinal;
  end;

var
  DllHook: PKeyboardLowLevelHookStruct;

begin
  if nCode = HC_ACTION then
  begin
    DllHook := PKeyboardLowLevelHookStruct(lParam);

    if (wParam = WM_KEYUP) or (wParam = WM_SYSKEYUP) then
    begin
      if (DllHook^.KeyCode >= Ord('0')) and (DllHook^.KeyCode <= Ord('9')) then
        RfidCode := RfidCode + Char(DllHook^.KeyCode)
      else if DllHook^.KeyCode = VK_RETURN then
      begin
        OutputDebugString(PWideChar('RFID-Code: ' + RfidCode));
        RfidCode := '';
      end;
    end;
  end;

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



procedure InitGlobalKeyboardHook();
begin
  GlobalKeyboardHook := SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardHook, 0, 0);

  if GlobalKeyboardHook = 0
    then RaiseLastOSError;
end;


procedure KillGlobalKeyboardHook();
begin
  if (GlobalKeyboardHook <> 0) then
    UnhookWindowsHookEx(GlobalKeyboardHook);
end;

initialization
  InitGlobalKeyboardHook();

finalization
  KillGlobalKeyboardHook();

end.
Hat jemand vielleicht hilfreiche Ideen dazu parat?
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz