Du
Der Hook selbst muss auf jeden Fall in eine
DLL ausgelagert sein, sonst funktioniert er nur als lokaler Hook. Ich habe auf Grund Deines gestrigen Postings als erstes den Aufruf von setwindowshookex auch in die
DLL übersiedelt, ich glaube jetzt aber eigentlich nicht mehr, dass das sein muss - werd ich jedenfalls auch noch ausprobieren. Ich wollte ursprünglich alles Hook-spezifische in eine eigene
Unit auslagern, damit ich es als lokaler Hook bequem testen und dann, wenn es fertig ist, ohne Änderung des Codes in eine
DLL übersiedeln kann. Weil die Parameter von setwindowshookex zwischen lokalem und globalem Hook differieren, hab ich diesen Aufruf eben nicht in der Hook-
Unit, sondern im aufrufendem Programm gemacht.
Einen Timer brauche ich, weil ich die Shift-Lock Taste entschärfen will, sie nervt in zweierlei Hinsicht: erstens schaltet sie auch die Zifferntasten und manche (nicht alle!) Sonderzeichentasten um, was wirklich kein Mensch braucht, auch wenn man einmal in Grossbuchstaben schreiben will. Zweitens, und dazu brauche ich den Timer, will ich Shift Lock deaktivieren, wenn die Taste beim Schreiben irrtümlich zeitnah mit einer anderen Taste gedrückt wird - jetzt hab ich 300 ms eingestellt. Die Umschaltung soll nur aktiviert werden, wenn vor und nach dem Drücken der Umschalttaste 300ms lang keine andere Taste kommt.
Danke für den Hinweis auf Cooltrayicon. Bevor ich mir einen Timer mit
API Aufrufen selbst bastle, werde ich mir die Komponente anschauen.
P.S.: Wird eine
DLL eigentlich automatisch entladen, wenn das Programm, das sie lädt, geschlossen wird, ohne FreeLibrary aufzurufen? Weil eigentlich brauch ich das Hauptprogramm nach dem Laden der
DLL nimmer, aber der Hook soll wirksam bleiben, bis der PC abgeschaltet wird.