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.