Entwickler-Ecke
Windows API - Bidirektionale Interaktion mit DLL-LowLevelKeyboardHook?
hydemarie - Mi 30.10.19 17:36
Titel: Bidirektionale Interaktion mit DLL-LowLevelKeyboardHook?
Ich bastle gerade ein kleines Tool, erst mal nur für mich, das einen Hook registriert, mit dem ich systemweit auf Tasteneingaben reagieren kann. (Kein Keylogger - was viel nützlicheres. Vielleicht zeige ich es euch später.) Das funktioniert auch so weit ganz gut.
Jetzt habe ich aber einen Knackpunkt drin: Ist das Hauptfenster aktiv, möchte ich es per <Esc> schließen können. Das habe ich zurzeit im LowLevelKeyboardHook drin.
Quelltext
1: 2: 3: 4: 5:
| function LowLevelKeyboardHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): HRESULT; stdcall; begin // ... if bAnwendungIstFokussiert and Key = VK_ESCAPE then Application.Terminate; end; |
Da diese Prozedur aber deshalb direkt mit dem Hauptfenster der Anwendung interagieren muss (statt nur andersrum): Bedeutet das, dass ich sie nicht mehr in eine DLL auslagern kann? Das würde ich sonst durchaus wollen.
Narses - Mi 30.10.19 22:50
Moin!
Ich mag mich täuschen oder etwas nicht richtig verstanden haben, aber...
hydemarie hat folgendes geschrieben : |
Ist das Hauptfenster aktiv, |
...dann kann es doch auch selbst auf den User-Input reagieren? :nixweiss:
cu
Narses
hydemarie - Do 31.10.19 02:22
Theoretisch schon, aber Form.KeyUp weigert sich bei mir noch zu greifen - und ich hätte doch Funktionsredundanz, oder?
Narses - Do 31.10.19 11:33
Moin!
hydemarie hat folgendes geschrieben : |
ich hätte doch Funktionsredundanz, oder? |
Nein, weil das schlicht nicht in die DLL gehört. Wenn mich meine Delphi-Kenntnisse nicht vollständig verlassen haben, dann sind (Delphi-)Objekte aus DLLs heraus tabu! :mahn: (ja, das klappt häufig trotzdem, das kann aber genausogut einen Absturz provozieren - warum wieso weshalb kriege ich aber nicht mehr richtig auf die Kette :?) Notfalls per IPC aus der DLL mit der Hauptanwendung reden, Flag setzen, Message schicken, da sollte noch was gehen.
hydemarie hat folgendes geschrieben : |
Theoretisch schon, aber Form.KeyUp weigert sich bei mir noch zu greifen |
Dann könnte das dein nächstes Forschungsobjekt sein? 8)
cu Narses
hydemarie - Do 31.10.19 12:12
So viel zu meinem Plan, mal eben ein kleines Programm zu schreiben ...
Danke. ;)
jaenicke - Do 31.10.19 14:01
Narses hat folgendes geschrieben : |
Wenn mich meine Delphi-Kenntnisse nicht vollständig verlassen haben, dann sind (Delphi-)Objekte aus DLLs heraus tabu! :mahn: (ja, das klappt häufig trotzdem, das kann aber genausogut einen Absturz provozieren - warum wieso weshalb kriege ich aber nicht mehr richtig auf die Kette :?) |
Der Speichermanager ist nicht der gleiche, die DLL hat einen eigenen. Dazu kommt, dass das Hauptprogramm mit einer anderen Version von Delphi kompiliert sein könnte als die DLL. Und dann stimmen die Klassenstrukturen schlicht nicht mehr überein.
Man kann aber dem Formular problemlos ein Interface verpassen und dieses an die DLL geben.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!