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

Globaler Tastaturhook für eine bestimmte Tastatur

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

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#1

AW: Globaler Tastaturhook für eine bestimmte Tastatur

  Alt 22. Sep 2022, 09:36
Oder, wenn man sich doch irgendwie sicher sein kann,
Dafür müsste aber das mit dem Startzeichen funktionieren,
sonst weißt du nicht, ob z.B. eine erse '0' vom Scanner oder dem Nutzer kommt.

Klar, man könnte sich auch ins IME hängen und nachträglich die Eingaben versuchen abzufangen,

aber am einfachsten/sichersten ist nunmal garnicht erst über die Tastatur zu gehen.



In Microsoft gibt es auch eine SmartCard-API und inzwischen auch ein paar Neuere,
welche diesen Reader ansteuern können dürften. (kann ich nich helfen ... hatte damals damit aufgegeben es hinzubekommen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
WladiD

Registriert seit: 27. Jan 2006
Ort: Celle
145 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Globaler Tastaturhook für eine bestimmte Tastatur

  Alt 22. Sep 2022, 13:15
Eine vielleicht weniger praktikable, aber dafür pragmatische Lösung wäre, einen USB-Filter in einer VM einzurichten. Funktioniert in VirtualBox wunderbar, siehe Anhang. Die Tastatur ist dann im Host nicht mehr verwendbar. Wenn die VM auch noch "Headless" ist, dann dürfte das ziemlich sicher sein.

In der VM müsste dann irgendein kleines Tool laufen, welches die Eingaben an die Zielanwendung überträgt.

Eine Treiberlösung wäre aber wahrscheinlich eleganter.
Angehängte Grafiken
Dateityp: png 2022-09-22 14_07_41-USB-Filter.png (24,4 KB, 10x aufgerufen)
Waldemar Derr
  Mit Zitat antworten Zitat
Exceeder

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

AW: Globaler Tastaturhook für eine bestimmte Tastatur

  Alt 22. Sep 2022, 13:23
Hallo,

ja das mit der Tastatur ist nicht ideal. Was sich erkennen lässt: Die einzelnen Zeichen werden alle mit Abstand von wenigen MS eingegeben. Sprich man könnte Zahlen erstmal abfangen, zwischenspeichern und zunächst verwerfen. Kommt dann kein weiteres Zeichen, müsste man die Zeichen mittels keybd_event wieder senden (sofern es nicht die Zeichenfolge von 10 Ziffern + Return war). Da habe ich gestern schon ein wenig herumexperimentiert. Natürlich braucht es eine Verzögerung von 50ms oder so. Ideal ist das alles nicht.

Unter Linux lässt sich dieser RFID-Reader übrigens einfach im Rahmen einer Phoniebox oder so verwenden. Da kommt man auch an die RAW-Inputs recht einfach dran (von dem Projekt sind die auch noch über, habe 6 Stück davon hier liegen).

Das Szenario hier ist sehr begrenzt. Im Prinzip geht es darum einen "Aufsatz" mit Sortiereinsätzen zu erkennen, welcher auf einem Lagerwagen gewechselt werden kann. Sprich das System soll erkennen können, welcher Aufsatz gerade aufgesteckt ist. Das muss also auch funktionieren, ohne das man in einen speziellen Modus wechselt.

Ich habe den Hersteller wegen eines Startzeichens geschrieben, mal sehen, ob da was kommt.

Für das Lesen von USB habe ich nichts passendes gefunden. Die Com-Port Komponente bei Torry ist ~20 Jahre alt und wurde vor 17 Jahres das letzte mal aktualisiert. Aber ich vermute auch, dass ich den Reader nicht in einen entsprechenden Modus versetzen kann. Gäbe es für die Smartcard-Api schon irgendwelchen Delphi-Code oder müsste man da "from scratch" anfangen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#4

AW: Globaler Tastaturhook für eine bestimmte Tastatur

  Alt 22. Sep 2022, 14:01
Comport, da findest du ein oder zwei Komponenten im GetIt.

AsyncPro (wo ist das denn hin?)
TComPortDrv
nrComm Lib
TMS Async

Ansonsten funktionieren die uralten TComport-Componenten auch weiterhin. (nutzen wir hier selber sowas)
Und zu Feig könnte ich auch noch bissl was abgeben. (ist aber jetzt noch nicht so hübsch, dass ich es öffentlich bereitstellen würde)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (22. Sep 2022 um 21:30 Uhr)
  Mit Zitat antworten Zitat
HolgerX

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

AW: Globaler Tastaturhook für eine bestimmte Tastatur

  Alt 22. Sep 2022, 19:37
Hmm..

Wenn Du mit Tastatur-Geräten arbeiten willst, kannst Du mit RawInputDevices arbeiten.
Dann erhälst du WM_INPUT Messages und kannst auch mit GetRawInputDeviceInfo Informationen zum Gerät erhalten (z.B. den HIDName per RIDI_DEVICENAME).

Wenn Du dann jedoch Eingaben des Gerätes Blockieren möchtest, kommst Du nicht um einen LowLevel Keyborthook (SetWindowsHookEx(WH_KEYBOARD..)) in einer DLL herum. Darin kannst Du dann der KeyboardHookProc() als Result 1 zurückgeben, so dass diese Taste als Verarbeitet gilt.

Hatte sowas mal testweise gebastelt, ist aber schon was her und ich weiß nicht mehr wo das Testtool abgeblieben ist..
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
Exceeder

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

AW: Globaler Tastaturhook für eine bestimmte Tastatur

  Alt 23. Sep 2022, 09:21
Hallo,

stimmt, es gibt ja jetzt GetIt. Hab mit Turbo Pascal angefangen und lange Zeit in der alten Firma noch mit XE7 gearbeitet. Das hat sich noch nicht so in den Kopf gebrannt. Ich mache das im Moment eher als Hobby nebenbei und habe über diese Quelle gar nicht nachgedacht.

@HolgerX Für die Blockade einer Tastatureingabe benötigt man keine DLL. Das geht auch in jedem normalen Programm. Mein Code vom Eingangspost musst nur um ein Exit(1); ergänzt werden, dann sind keine Eingaben mehr möglich.

Ich schaue trotzdem mal, ob man mit der Methode GetRawInputDeviceInfo irgendwas erreichen kann. Wobei das eher so aussieht, als wenn man sich hier mit eher vorab Devices auflisten kann. Im Keydown bzw. Keyup Event steht dann ja leider keine Device ID zur Verfügung. Eventuell gibt es aber doch noch mehr Informationen. Ex, Ex2, Ex3 lässt grüßen. Mal gucken ob man TKeyboardLowLevelHookStruct also noch erweitern kann.
  Mit Zitat antworten Zitat
HolgerX

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

AW: Globaler Tastaturhook für eine bestimmte Tastatur

  Alt 23. Sep 2022, 19:42
Hmm..

Hallo,

stimmt, es gibt ja jetzt GetIt. Hab mit Turbo Pascal angefangen und lange Zeit in der alten Firma noch mit XE7 gearbeitet. Das hat sich noch nicht so in den Kopf gebrannt. Ich mache das im Moment eher als Hobby nebenbei und habe über diese Quelle gar nicht nachgedacht.

@HolgerX Für die Blockade einer Tastatureingabe benötigt man keine DLL. Das geht auch in jedem normalen Programm. Mein Code vom Eingangspost musst nur um ein Exit(1); ergänzt werden, dann sind keine Eingaben mehr möglich.

Ich schaue trotzdem mal, ob man mit der Methode GetRawInputDeviceInfo irgendwas erreichen kann. Wobei das eher so aussieht, als wenn man sich hier mit eher vorab Devices auflisten kann. Im Keydown bzw. Keyup Event steht dann ja leider keine Device ID zur Verfügung. Eventuell gibt es aber doch noch mehr Informationen. Ex, Ex2, Ex3 lässt grüßen. Mal gucken ob man TKeyboardLowLevelHookStruct also noch erweitern kann.
Die DLL benötigst Du, wenn du 'Global', also auch für andere Applikationen die Tastatureingabe abfangen willst.
Auch bekommst Du hier mit deinem LowLevelHookStruct/SetWindowsHookEx keine DeviceInfos. Dies geht nur per RawInputDevices.

Mit GetRawInputDeviceInfo kannst Du innerhalb der WM_INPUT (nach RegisterRawInputDevices) arbeiten, da in der Message ein Handle enthalten ist, mit dem Du per GetRawInputData ein RAWINPUT mit RAWINPUTHEADER erhältst. Damit dann per GetRawInputDeviceInfo z.B. den HIDName holen und damit das Device identifizieren.

Mit Keydown bzw. Keyup kannst Du hier nichts anfangen....
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)

Geändert von HolgerX (23. Sep 2022 um 19:45 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:05 Uhr.
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