AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

dll mit hotkey...

Ein Thema von Beckman · begonnen am 13. Jul 2005 · letzter Beitrag vom 13. Jul 2005
Antwort Antwort
Beckman

Registriert seit: 12. Jul 2004
205 Beiträge
 
#1

dll mit hotkey...

  Alt 13. Jul 2005, 00:56
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?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: dll mit hotkey...

  Alt 13. Jul 2005, 01:12
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Beckman

Registriert seit: 12. Jul 2004
205 Beiträge
 
#3

Re: dll mit hotkey...

  Alt 13. Jul 2005, 01:20
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
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#4

Re: dll mit hotkey...

  Alt 13. Jul 2005, 10:14
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.
  Mit Zitat antworten Zitat
13. Jul 2005, 10:23
Dieses Thema wurde von "sakura" von "Sonstige Fragen zu Delphi" nach "Windows API / MS.NET Framework API" verschoben.
Beckman

Registriert seit: 12. Jul 2004
205 Beiträge
 
#6

Re: dll mit hotkey...

  Alt 13. Jul 2005, 10:32
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
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#7

Re: dll mit hotkey...

  Alt 13. Jul 2005, 10:40
Zitat von Beckman:
jo. ne. das ding wird injected in die host app. die kann ich net bearbeiten...
Aber hallo? Was machst du denn? Etwa kein Fenster angeben? Dann wird's tatsächlich kompliziert. Aber wenn du ein Fenster angibst, kannst du es subclassen und dann selber in der DLL die Bearbeitung übernehmen. Wüßte nicht wo da das Problem sein sollte.

Zitat von Beckman:
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
Dazu habe ich ein Tutorial geschrieben:
http://assarbad.net/en/stuff/tutorials/hooks/

Ü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!
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#8

Re: dll mit hotkey...

  Alt 13. Jul 2005, 11:40
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...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz