unit
HotKeyComponent;
interface
uses
Windows, Messages, SysUtils, Classes, Dialogs;
type
THotKeyComponent =
class
(TComponent)
private
id1, id2, id3, id4:
Integer
;
FWnd: HWND;
procedure
WndProc(
var
Msg: TMessage);
public
constructor
Create(AOwner: TComponent); override;
destructor
Destroy; override;
end
;
procedure
Register;
implementation
procedure
Register;
begin
RegisterComponents(
'Samples'
, [THotKeyComponent]);
end
;
constructor
THotKeyComponent
.
Create(AOwner: TComponent);
const
MOD_ALT =
1
;
MOD_CONTROL =
2
;
MOD_SHIFT =
4
;
MOD_WIN =
8
;
VK_A =
$41
;
VK_R =
$52
;
VK_F4 =
$73
;
begin
inherited
;
if
not
(csDesigning
in
ComponentState)
then
begin
FWnd := AllocateHWnd(WndProc);
id1 := GlobalAddAtom(
'Hotkey1'
);
RegisterHotKey(FWnd, id1, MOD_CONTROL, VK_A);
id2 := GlobalAddAtom(
'Hotkey2'
);
RegisterHotKey(FWnd, id2, MOD_CONTROL + MOD_Alt, VK_R);
id3 := GlobalAddAtom(
'Hotkey3'
);
RegisterHotKey(FWnd, id3, MOD_WIN, VK_F4);
id4 := GlobalAddAtom(
'Hotkey4'
);
RegisterHotKey(FWnd, id4,
0
, VK_SNAPSHOT);
end
;
end
;
destructor
THotKeyComponent
.
Destroy;
begin
if
not
(csDesigning
in
ComponentState)
then
begin
UnRegisterHotKey(FWnd, id1);
GlobalDeleteAtom(id1);
UnRegisterHotKey(FWnd, id2);
GlobalDeleteAtom(id2);
UnRegisterHotKey(FWnd, id3);
GlobalDeleteAtom(id3);
UnRegisterHotKey(FWnd, id4);
GlobalDeleteAtom(id4);
DeallocateHWnd(FWnd);
end
;
inherited
;
end
;
procedure
THotKeyComponent
.
WndProc(
var
Msg: TMessage);
var
WMHotKey: TWMHotKey absolute Msg;
begin
case
Msg
.
Msg
of
WM_HOTKEY:
begin
if
WMHotKey
.
HotKey = id1
then
ShowMessage(
'Ctrl + A pressed !'
);
if
WMHotKey
.
HotKey = id2
then
ShowMessage(
'Ctrl + Alt + R pressed !'
);
if
WMHotKey
.
HotKey = id3
then
ShowMessage(
'Win + F4 pressed !'
);
if
WMHotKey
.
HotKey = id4
then
ShowMessage(
'Print Screen pressed !'
);
end
;
else
DefWindowProc(FWnd, Msg
.
Msg, Msg
.
WParam, Msg
.
LParam);
end
;
end
;
end
.