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...
user profile iconhydemarie hat folgendes geschrieben Zum zitierten Posting springen:
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!

user profile iconhydemarie hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconhydemarie hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
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.