Ctrl/Shift/Alt/Winキーを受け付けるWindowsのHotKeyを登録・処理する
|
49 |
HotKeyRegistration |
動作確認 |
Delphi2007 |
更新日 |
2008/01/29(火) |
HotKeyというのは、あるキーの組み合わせを押したら
どんなアプリが動いていても
自分のアプリのイベントが呼ばれるという便利な仕組みです。
アプリケーション内でWindowsOSにキーを登録しておけば
登録したアプリ(というかウィンドウハンドル)に
メッセージが流れてくる仕組みです。
これを使えば、例えば、どんな場面でもEscを押したら
動作するようなソフトを作る事が出来ます。
HotKeyを登録するのに、Formのハンドルが必要です。
────────────────────
type
TForm1 = class(TForm)
private
protected
public
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
end;
{-------------------------------
// HotKeyの処理
機能:
備考: ShortCutToKeyを使っているので
uses Menusが必要
履歴: 2007/01/03(水) 01:08
//------------------------------}
procedure SetHotKeyToOS(Handle: THandle; HotKeyNumber: Integer; VirtualKey: Word;
Shift, Ctrl, Alt, Win: Boolean);
var
Modifiers: Word;
begin
Modifiers := 0;
if Shift then Modifiers := Modifiers or MOD_SHIFT;
if Ctrl then Modifiers := Modifiers or MOD_CONTROL;
if Alt then Modifiers := Modifiers or MOD_ALT;
if Win then Modifiers := Modifiers or MOD_WIN;
RegisterHotKey(Handle, HotKeyNumber, Modifiers, VirtualKey);
end;
//WindowsHotKey登録後、受け取り処理
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
{下:登録したHotKeyNumberによってcaseで分岐出来ます}
case Msg.HotKey of
1: ShowMessage('Aが押されました');
2: ShowMessage('↑が押されました');
3: ShowMessage('Escが押されました');
end;
end;
//------------------------------
//-------------------------------
//Windowsホットキーを登録する
procedure TForm1.Button1Click(Sender: TObject);
begin
SethotKeyToOS(Self.Handle, 1, Ord('A'), False, False, False, False);
SethotKeyToOS(Self.Handle, 2, VK_UP, False, False, False, False);
SethotKeyToOS(Self.Handle, 3, VK_ESCAPE, False, False, False, False);
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if CanClose then
begin
UnregisterHotKey(Self.Handle, 1);
UnregisterHotKey(Self.Handle, 2);
UnregisterHotKey(Self.Handle, 3);
end;
end;
────────────────────
アプリケーション終了すれば解除されるようですが
RegisterHotKeyを行った時はUnRegisterHotKeyを行った方がよいでしょう。
|