Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Keyboard Input abfangen (https://www.delphipraxis.net/48580-keyboard-input-abfangen.html)

DarkLord0 27. Jun 2005 16:47


Keyboard Input abfangen
 
Hallo,

Ich suche eine Möglichkeit, das Tastatur Input auf möglichst niedriger/system Ebene abzufangen (und in meinem Programm zu benutzen). Der Hintergrund ist, dass ich bei meinem Programm hotkeys benutze, aber nicht die registerhotkey funktion von windows benutzen möchte. Auch (globale) hooks sind, wie mir scheint, nicht die optimale Lösung weil zu ressourcenlastig(wichtig!) (weil eine DLL verwendet werden muss, die mit dem Hauptprogramm kommuniziert); dasselbe gilt für timer o.ä. Ich *hoffe*, es gibt dafür eine Möglichkeit, die nicht auf die dafür vorgesehenen winAPI calls zurückgreifen muss, bin aber auch für alles andere passende offen

DGL-luke 27. Jun 2005 17:09

Re: Keyboard Input abfangen
 
Zitat:

Zitat von DarkLord0
Hallo,
(weil eine DLL verwendet werden muss, die mit dem Hauptprogramm kommuniziert) offen

meinst du damit das hier:

Zitat:

lpfn
[in] Pointer to the hook procedure. If the dwThreadId parameter is zero or specifies the identifier of a thread created by a different process, the lpfn parameter must point to a hook procedure in a dynamic-link library (DLL). Otherwise, lpfn can point to a hook procedure in the code associated with the current process.
dann kann ich dich beruhingen: es wird unter WinNT/XP nicht einmal MIT Dll feunktionieren.

Du musst einen der LL hooks nehmen. such mal nach WH_KEYBOARD_LL, da solltest du auf einen thread von mir und einen beitrag von hagen(? is schon länger her...) stoßen, in dem das ganze ausführlich dargelgt ist. dann gehts auch OHNE DLL.

DarkLord0 27. Jun 2005 17:48

Re: Keyboard Input abfangen
 
Nein, ich habe es mit globalen Hooks und DLL schon zum laufen bekommen - auch unter XP - (mit Hilfe des Assarbad-Tutorials), aber ich suche eben einen in meinem Fall besseren Weg.
Ich werde aber mal nach deinem Thread mit WH_KEYBOARD_LL suchen, danke soweit

DGL-luke 27. Jun 2005 17:54

Re: Keyboard Input abfangen
 
wahr wohl doch Flocke, und nicht hagen... :oops:

http://www.delphipraxis.net/internal...t=whkeyboardll

hier is das gute stück, ganz unten is noch ne demo-app von Flocke dran! :-D

DarkLord0 27. Jun 2005 20:35

Re: Keyboard Input abfangen
 
Jo, scheint zu funktionieren. Ich werde damit mal mein Programm 'ausstatten'.
Danke, hast mir wirklich weitergeholfen :)

DarkLord0 29. Jun 2005 17:30

Re: Keyboard Input abfangen
 
Funktionert ausgezeichnet !
Aber wie kann ich denn aus dem in der Funktion durch vkcode weitergegebenen Zeichen-Nummer herausfinden, welche Taste gedrückt wurde ? Chr(vkcode) liefert z.B. für die Taste "#" ein "¿" ...

Flocke 29. Jun 2005 17:40

Re: Keyboard Input abfangen
 
Hier gibt's in der Code-Library eine Liste der virtuellen Keycodes. Es gibt aber auch noch eine API-Funktion, die VK's in Zeichen übersetzt, ich such' gerade noch...

[Nachtrag]

... gefunden! Hier

DarkLord0 29. Jun 2005 19:08

Re: Keyboard Input abfangen
 
Danke, aber bei mir geht das dann mit VKToChar(vkcode,0,0) nicht bei allen Zeichen. Zum Beispiel scheint der vkcode von "#" 191 zu sein - ab Zeichen 128 gibt die Funktion aber bei mir nur "" aus :/

edit : Ich hab auch mal versucht, toasciiex mit tounicodeex zu ersetzen, das hat aber auch nichts geändert.

DarkLord0 3. Jul 2005 22:59

Re: Keyboard Input abfangen
 
Update : Hab' es jetzt mit einer selbsterstellten Tabelle gelöst (wird dann wohl nur auf deutschen/mitteleuropäischen tastaturbelegungen vollständig funktionieren). Gibt es so etwas wie WH_KEYBOARD_LL eigentlich auch für maus input?
edit : natürlich WH_MOUSE_LL


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 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