Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: KeyHook Irreführend

  Alt 13. Apr 2011, 10:34
Irgendwie verwirrt mich der ganze Beitrag etwas.

Habe mal für mein Piano eine KeyHook.dll eingebunden.
Davon gibt es sicherlich tausende, jeder kann eine DLL so nennen.

Normalerweise wird so eine DLL im System registriert, so dass diese beim Start jeder Anwendung mitgeladen wird
und so alle Tastatureingaben verarbeiten kann, egal welche Anwendung den Focus hat.
Der Name der DLL ist eigentlich unwichtig.
Kompliziert wirds wenn 64- und 32-Bit-Anwendungen gemischt auftreten.

Mein Problem vorher
Wenn ich ohne Keyhook arbeite und die Tastatur für die Klaviertasten freigebe
kann ich alle meine Button nicht mehr bedienen da diese innerhalb der SuperClass nach
If WinHandle = GetFocus then abfragen.

Wenn ich bedingt durch die Tastaturzuweisung den Focus auf das MainHandle lege
schlägt diese Abfrage natürlich fehl.
Normalerweise verwenden Musikinstrumente die Midi-Schnittstelle, dieses scheinbar nicht.
Von was für einer SuperClass ist hier die Rede, aus welcher Komponentensammlung stammt diese
und was machen diese Klassen, ist Quellcode vorhanden, kann dieser gepatcht werden?

Jetzt habe ich den Keyhook eingebaut aber das problem bleibt bestehn da ich als Hook Handle
ja auch wieder das Handle der MainForm angegeben habe.
Normalerweise meldet man bei der KeyHook.dll das Fenster(Handle) an, das über die Tasten informiert werden soll,
diese verarbeitet, oder auch nicht und damit an die Anwendung weitergibt, die derzeit den Focus hat.

Zitat:
Was ich auch nicht verstehe warum muss man dann obwohl ein Hook installiert ist seine
Anweisungen noch über WM_KEYDOWN: und WM_KEYUP: übergeben.
OK das ist quatsch irgendwo müssen die Keyevents ja übergeben werden.
Der Datenaustausch zwischen der DLL und der Anwendung kann auch über Nachrichten erfolgen,
aber nicht unbedingt über WM_KEYDOWN und WM_KEYUP.

Welchen Sinn macht dann ein Hook?
Wenn er die Anwendung genauso blockt wie vorher.
Ein Keyboard-Hook blockt keine Anwendung, bitte etwas genauer formulieren.

Bei bedarf sende ich mal den Quelltext vom Hook.
Den Quelltext der KeyHook.dll und den Quelltext in deiner Anwendung.

PS:
Wie kann ich SetFocus behandeln das nicht die anderen Controls geblockt werden.
Was verstehst du unter "blockt"?
Der Begriff scheint mir in Zusammenhang mit SetFocus nicht sinnvoll.
  Mit Zitat antworten Zitat