![]() |
dll mit hotkey...
Delphi-Quellcode:
library hotlock;
uses windows, Messages; type TDummy = class private id1: Integer; procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; public procedure Keybind1; procedure EnableHotKey; procedure DisableHotKey; end; var Dummy: TDummy; procedure TDummy.WMHotKey(var Msg: TWMHotKey); begin if Msg.HotKey = id1 then Dummy.Keybind1; end; procedure TDummy.Keybind1; begin MessageBox(0, 'KEYBIND1 was captured', 'SUCCESS!', 0); dummy.DisableHotKey; //dummy.Free; end; procedure TDummy.EnableHotKey; begin //Globally trap the Windows system key "PrintScreen" id1 := GlobalAddAtom('Hotkey1'); RegisterHotKey(0, id1, 0, VK_SNAPSHOT); end; procedure TDummy.DisableHotKey; begin //Unregister the Hotkey UnRegisterHotKey(0, id1); GlobalDeleteAtom(id1); end; begin Dummy := Tdummy.Create; Dummy.EnableHotKey; end. die dll soll beim 'geladen werden' den gegebenen hotkey registrieren. das alles funkt ja schoen und gut mit den atoms. und es funkt auch normaler weise in ner normalen app systemweit. das einzige prob ist nur, dass diese dll ueber den WM_HOTKEY scheinbar net informiert wird oder sowas. weiss hier einer rat? |
Re: dll mit hotkey...
Wie hats du dir denn vorgestellt, dass die Nachricht WM_HOTKEY in deiner DLL ankommen soll? Zu erst einmal bekommt die Naschricht das fenster, was einen HotKey registriert hat über die MessageLoop. Von dort wird sie an die FensterProzedur weitergegeben, die dort angegeben ist. Wie soll jetzt also deine DLL die Nachrciht bekommen?
|
Re: dll mit hotkey...
Delphi-Quellcode:
library hotlock;
uses windows, Messages, SysUtils; type TDummy = class private id1: Integer; procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; public procedure Keybind1; procedure EnableHotKey; procedure DisableHotKey; end; var Dummy: TDummy; Msg: TMsg; procedure TDummy.WMHotKey(var Msg: TWMHotKey); begin if Msg.HotKey = id1 then Dummy.Keybind1; end; procedure TDummy.Keybind1; begin MessageBox(0, 'KEYBIND1 was captured', 'SUCCESS!', 0); end; procedure TDummy.EnableHotKey; begin //Globally trap the Windows system key "PrintScreen" id1 := GlobalAddAtom('Hotkey1'); RegisterHotKey(0, id1, 0, VK_END); end; procedure TDummy.DisableHotKey; begin //Unregister the Hotkey UnRegisterHotKey(0, id1); GlobalDeleteAtom(id1); end; begin Dummy := Tdummy.Create; Dummy.EnableHotKey; while GetMessage(Msg, 0, 0, 0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; dummy.DisableHotKey; dummy.Free; { while GlobalFindAtom('Hotkey1') <> 0 do GlobalDeleteAtom(GlobalFindAtom('Hotkey1')); } end. so, aber die host app wird eingefrorren. obwohl der hotkey funken muss, weil er net mehr im explorer zb funkt. //edit: globalkeyhook ist mein freund :) da das ganze ja ne 'dll' ist. mal sehen, was meister google und meister forensuche mir verraten :) |
Re: dll mit hotkey...
Grundsätzlich: Keine DLL kann einen Hotkey registrieren. Jetzt meinst du vielleicht: "Bei mir geht's doch."! Falsch! Du schließt Falsches aus deiner Beobachtung. Ein Hotkey wird immer für ein Fenster registriert, oder alternativ für den aufrufenden (also meistens wahrscheinlich den Haupt-) Thread der Anwendung. Damit ist klar, wo die WM_HOTKEY-Nachricht bearbeitet werden muß, denn grundsätzlich gibt es nur eine Nachrichtenschleife pro Thread!
Ein Vorschlag von mir wäre, daß du der Anwendung selber eine Bearbeitung für WM_HOTKEY verpaßt, in der du eine Callback-Funktion aufrufst, welche ja dann wiederum in der DLL enthalten sein kann. |
DP-Maintenance
Dieses Thema wurde von "sakura" von "Sonstige Fragen zu Delphi" nach "Windows API / MS.NET Framework API" verschoben.
|
Re: dll mit hotkey...
jo. ne. das ding wird injected in die host app. die kann ich net bearbeiten...
aber ich kaempf grad gegen text salate wegen den dll/hooks. ich braeuchte ja thoeretisch nur sonen keyboard/hook, was mir im moment noch net gelingt... die meisten codes, die ich finde, versteh ich noch net, aber heute bin ich noch optimistisch :) |
Re: dll mit hotkey...
Zitat:
Zitat:
![]() Über Feedback (was ist unverständlich usw.) freue ich mich natürlich (am besten direkt in meinem Forum). Allerdings vermute ich, daß ein Hook hier Overkill ist, es sei denn du arbeitest fensterlos! |
Re: dll mit hotkey...
Mit Kanonen auf Spatzen...
Du brauchst keinen Dummy-Hook, sondern nur ein Fenster(thread) in deiner DLL. Beispiele gibt es sicher genug im Forum. Und selbst wenn nicht, scheibe an welcher Stelle Du nicht weiter kommst... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz