type
TForm1 = class (TForm)
HotKey1: THotKey;
Button1: TButton;
procedure
Button1Click(Sender: TObject);
procedure
FormDestroy(Sender: TObject);
private
{ Private declarations }
procedure
WMHotKey( var
Msg:TMessage);message WM_HOTKEY;
public
{ Public declarations }
end ;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
Key, Shift: Word ;
Id: Integer ;
procedure
ShortCutToKey(ShortCut: TShortCut; var
Key: Word ; var
Shift: TShiftState);
begin
Key := ShortCut and
not (scShift + scCtrl + scAlt);
Shift := [];
if ShortCut and
scShift <> 0
then Include(Shift, ssShift);
if ShortCut and
scCtrl <> 0
then Include(Shift, ssCtrl);
if ShortCut and
scAlt <> 0
then Include(Shift, ssAlt);
end ;
function
ShiftStateToWord(TShift: TShiftState): Word ;
begin
Result := 0 ;
if ssShift in
TShift then
Result := MOD_SHIFT;
if ssCtrl in
TShift then
Result := Result or
MOD_CONTROL;
if ssAlt in
TShift then
Result:= Result or
MOD_ALT;
end ;
procedure
TForm1 . Button1Click(Sender: TObject);
var
T: TShiftState;
begin
Id := GlobalAddAtom( ‘MyHotKey‘ ) - $C000 ;
ShortCutToKey(HotKey1 . HotKey, Key, T);
Shift := ShiftStateToWord(T);
RegisterHotKey(Handle, Id, Shift, Key);
end ;
procedure
TForm1 . WMHotKey( var
Msg: TMessage);
begin
if (Msg . LparamLo = Shift) AND
(Msg . LParamHi = Key) then
ShowMessage( ‘This is HotKey‘ );
end ;
procedure
TForm1 . FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(Handle, Id);
GlobalDeleteAtom(Id);
end ;
end .
|