|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"ホットキーの使用例"
ホットキーを設定して、WM_HOTKEYメッセージを監視することで、自分が
アクティブでない状態でも、ホットキーの入力を捕まえることができます。
以下は、Ctrl+F1 をホットキーとして登録するサンプルです。
以下のプログラムを実行後、他のアプリをアクティブにした状態で、
Ctrl+F1キーを押してみて下さい。
---------- ここから ----------
type
TForm1 = class(TForm)
private
{ Private 宣言 }
procedure CreateWnd; override;
procedure DestroyWnd; override;
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.CreateWnd;
begin
inherited CreateWnd;
// MOD_ALT Alt キー
// MOD_CONTROL Ctrl キー
// MOD_SHIFT Shiftキー
// Ctrl + F1 を登録する ↓IDを123にしてみました
if RegisterHotKey(Handle, 123, MOD_CONTROL, VK_F1) = False then
ShowMessage('RegisterHotKey();に失敗しました');
end;
procedure TForm1.DestroyWnd;
begin
UnregisterHotKey(Handle, 123); //ID=123です
inherited DestroyWnd;
end;
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
// ↓ここでIDをチェックします
if Msg.HotKey = 123 then begin
SetForegroundWindow(Handle);
ShowMessage('Ctrl + F1 が押されました');
end;
Msg.Result := 0; //これは不要かもしれません
end;
---------- ここまで ----------
# FormCreateイベントで RegisterHotKeyを呼び出して、
# FormClose イベントで UnregisterHotKeyするのが普通かも知れませんが、
# その方法だと、Formの Position,BorderStyleプロパティなどを変更した
# 場合にホットキーの設定が無効になってしまう(*1)ため、あえて CreateWnd
# DestroyWndで処理しています。
# (*1)VCLの特性で、Formのウィンドウがいったん破棄された後、再生成され、
# Form.Handleが以前と異なる値になってしまうためです。
98/01/19(月) 20:07 Satobe(JCG00336)
Original document by Satobe 氏 ID:(JCG00336)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|