AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Diese Sache mit den globalen Hooks...
Thema durchsuchen
Ansicht
Themen-Optionen

Diese Sache mit den globalen Hooks...

Ein Thema von CalganX · begonnen am 30. Sep 2005 · letzter Beitrag vom 1. Okt 2005
Antwort Antwort
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

Re: Diese Sache mit den globalen Hooks...

  Alt 1. Okt 2005, 12:08
Hi,
@Olli: An Code für einen Hook habe ich bisher noch gar nichts.

@tommie und Thornberry: ja, das klingt gut, danke! Aber irgendwie funktioniert das noch nicht so ganz...
Habe mir auf die Schnelle das schnell in eine Klasse gepackt:
Delphi-Quellcode:
unit uGlobalHotKey;

interface

uses
  Windows, Classes, Forms, Menus, Messages;

type
  TGlobalHotKey = class(TObject)
  private
    FHotKey: TShortCut;
    FOnHotKey: TNotifyEvent;

  protected
    procedure WMHotKey(var msg: TMessage); message WM_HOTKEY;

  public
    constructor Create;
    destructor Destroy; override;

    function RegisterKey: boolean;
    function UnregisterKey: boolean;

  published
    property HotKey: TShortCut read FHotKey write FHotKey;
    property OnHotKey: TNotifyEvent read FOnHotKey write FOnHotKey;

  end;

implementation

{ TGlobalHotKey }

constructor TGlobalHotKey.Create;
begin
  inherited;

  // Nothing to do
end;

destructor TGlobalHotKey.Destroy;
begin
  // Hotkey wieder freigeben
  UnregisterKey;

  inherited;
end;

function TGlobalHotKey.RegisterKey: boolean;
var
  uModifier, uKey: Word;
  sShiftState: TShiftState;
begin
  Result := false;

  // Kombination zugewiesen?
  if FHotKey = 0 then Exit;

  // Kombination entschlüsseln
  ShortCutToKey(FHotKey, uKey, sShiftState);

  uKey := Ord('A');

  // Modifier-Key rausfinden
  uModifier := 0;
  if ssAlt in sShiftState then
    uModifier := uModifier or MOD_ALT;
  if ssCtrl in sShiftState then
    uModifier := uModifier or MOD_CONTROL;
  if ssShift in sShiftState then
    uModifier := uModifier or MOD_SHIFT;

  // Kombination registrieren
  Result := RegisterHotKey(Application.Handle, $BFFF, uModifier, uKey);
end;

function TGlobalHotKey.UnregisterKey: boolean;
begin
  // HotKey deregistrieren
  Result := UnregisterHotKey(Application.Handle, $BFFF);
end;

procedure TGlobalHotKey.WMHotKey(var msg: TMessage);
begin
  // Nachricht erhalten und Event auslösen
  if Assigned(FOnHotKey) then
    FOnHotKey(self);
end;

end.
Nun wird allerdings mein Ereignis nie ausgelöst. Und auch wenn ich über Application.OnMessage versuche die Nachricht WM_HOTKEY abzufangen warte ich relativ ewig... Habe schon geguckt... rein theoretisch müsste es funktioniert (Einzelschritt sagt mir, dass [CTRL]+[ALT]+[A] registriert wurde).

Habt ihr eine Idee?

Chris
  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 00:56 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