Registriert seit: 30. Jun 2007
278 Beiträge
Delphi 2009 Professional
|
Re: globale Hotkeys funktionieren nicht!
31. Aug 2007, 11:53
RegisterHotKey liefert nicht 0 zurück, also funktioniert es. Es zeigt nur keine Reaktion.
Hier der Source aus dem 2. Beispiel den ich einfach per Copy&Paste übernommen habe in ein neues Projekt und dann ausführe:
Delphi-Quellcode:
{
The following example demonstrates registering hotkeys with the
system to globally trap keys.
Das Folgende Beispiel zeigt, wie man Hotkeys registrieren und
darauf reagieren kann, wenn sie gedrückt werden. (systemweit)
}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
id1, id2, id3, id4: Integer;
procedure WMHotKey( var Msg: TWMHotKey); message WM_HOTKEY;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// Trap Hotkey Messages
procedure TForm1.WMHotKey( var Msg: TWMHotKey);
begin
if Msg.HotKey = id1 then
ShowMessage(' Ctrl + A pressed !');
if Msg.HotKey = id2 then
ShowMessage(' Ctrl + Alt + R pressed !');
if Msg.HotKey = id3 then
ShowMessage(' Win + F4 pressed !');
if Msg.HotKey = id4 then
ShowMessage(' Print Screen pressed !');
end;
procedure TForm1.FormCreate(Sender: TObject);
// Different Constants from Windows.pas
const
MOD_ALT = 1;
MOD_CONTROL = 2;
MOD_SHIFT = 4;
MOD_WIN = 8;
VK_A = $41;
VK_R = $52;
VK_F4 = $73;
begin
// Register Hotkey Ctrl + A
id1 := GlobalAddAtom(' Hotkey1');
RegisterHotKey( Handle, id1, MOD_CONTROL, VK_A);
// Register Hotkey Ctrl + Alt + R
id2 := GlobalAddAtom(' Hotkey2');
RegisterHotKey( Handle, id2, MOD_CONTROL + MOD_Alt, VK_R);
// Register Hotkey Win + F4
id3 := GlobalAddAtom(' Hotkey3');
RegisterHotKey( Handle, id3, MOD_WIN, VK_F4);
// Globally trap the Windows system key "PrintScreen"
id4 := GlobalAddAtom(' Hotkey4');
RegisterHotKey( Handle, id4, 0, VK_SNAPSHOT);
end;
// Unregister the Hotkeys
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey( Handle, id1);
GlobalDeleteAtom(id1);
UnRegisterHotKey( Handle, id2);
GlobalDeleteAtom(id2);
UnRegisterHotKey( Handle, id3);
GlobalDeleteAtom(id3);
UnRegisterHotKey( Handle, id4);
GlobalDeleteAtom(id4);
end;
end.
{
RegisterHotKey fails if the keystrokes specified for the hot key have
already been registered by another hot key.
Windows NT4 and Windows 2000/XP: The F12 key is reserved for use by the
debugger at all times, so it should not be registered as a hot key. Even
when you are not debugging an application, F12 is reserved in case a
kernel-mode debugger or a just-in-time debugger is resident.
}
|
|
Zitat
|