Windows OS全体にホットキー登録してアプリで応答(VCL) ~Delphiソースコード集
Windowsシステム全体にRegisterHotkey関数でホットキーを登録します。
ホットキーを登録すると、アプリケーションがアクティブでない場合でもホットキーが押されたら
WM_HOTKEYメッセージが届いてキーの入力を捕まえることができるようになります。
プロジェクトとフォームの作成
Delphi IDEを起動し、「ファイル」⇒「Windows VCLアプリケーション -Delphi」をクリックしますフォーム上に以下をドラッグ&ドロップします。
TMemo×1個
ソースコードの記述
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private 宣言 } FHotKeyID1:ATOM; //[CTRL]+[WIN]+[F12]キー 用ホットキーID FHotKeyID2:ATOM; //[ALT]+[Z]キー 用ホットキーID //ホットキーが押された時に呼び出されるメソッド procedure WMHotKey(var Message:TMessage); message WM_HOTKEY; public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var res:BOOL; begin //ホットキーIDは、 //アプリケーション(exe)の場合は$0000~$BFFFの範囲の値を指定し //DLLの場合はGlobalAddAtom関数で$C000~$FFFFの値を取得して指定する // (例)FHotKeyID1:=GlobalAddAtom('MyAppRegistHotKey'); // (例)FHotKeyID2:=GlobalAddAtom('MyAppRegistHotKey'); //今回はアプリケーション(exe)なのでホットキーIDを適当に指定する FHotKeyID1:=$B000; FHotKeyID2:=$B001; //ホットキーを登録 [CTRL]+[WIN]+[F12] キー res:=RegisterHotkey(Handle, FHotKeyID1, MOD_CONTROL or MOD_WIN, VK_F12); if res then begin //登録成功時 Memo1.Lines.Add('[CTRL]+[WIN]+[F12]が登録されました'); end else begin //登録失敗時 Memo1.Lines.Add('失敗:[CTRL]+[WIN]+[F12]は既に他のアプリで登録済みです'); FHotKeyID1:=0; end; //ホットキーを登録 [ALT]+[Z] キー res:=RegisterHotkey(Handle, FHotKeyID2, MOD_ALT, Ord('Z')); if res then begin //登録成功時 Memo1.Lines.Add('[ALT]+[Z]が登録されました'); end else begin //登録失敗時 Memo1.Lines.Add('失敗:[ALT]+[Z]は既に他のアプリで登録済みです'); FHotKeyID2:=0; end; end; procedure TForm1.FormDestroy(Sender: TObject); begin //DLLの場合はアトムに登録されている文字列を削除 // (例)GlobalDeleteAtom(FHotKeyID1); // (例)GlobalDeleteAtom(FHotKeyID2); //ホットキーの登録解除 if FHotKeyID1 <> 0 then UnregisterHotKey(Self.Handle,FHotKeyID1); if FHotKeyID2 <> 0 then UnregisterHotKey(Self.Handle,FHotKeyID2); end; procedure TForm1.WMHotKey(var Message: TMessage); begin //■登録したホットキーが押された時の処理 //ウィンドウが最小化されていたら普通に戻す if Self.WindowState=TWindowState.wsMinimized then begin Self.WindowState:=TWindowState.wsNormal; end; //ウィンドウをフォアグラウンドに設定する SetForegroundWindow(Self.Handle); //ウィンドウを手前に移動させる SetWindowPos(Self.Handle, HWND_TOP,0,0,0,0,SWP_NOMOVE+SWP_NOSIZE); if Message.WParam=FHotKeyID1 then begin Memo1.Lines.Add( FormatDateTime('hh:nn:ss',Now)+ '[CTRL]+[WIN]+[F12]キーが押されました' ); end else if Message.WParam=FHotKeyID2 then begin Memo1.Lines.Add( FormatDateTime('hh:nn:ss',Now)+ '[ALT]+[Z]キーが押されました' ); end; end; end.
実行する
実行⇒実行 などから実行します。(自動的にコンパイルされて、実行ファイルが生成され、実行されます)実行したアプリケーションを「ウィンドウの最小化」するなり、デスクトップをクリックするなりして、非アクティブな状態にします。
この状態でキーボードから[ALT]+[Z]又は[CTRL]+[WIN]+[F12]キーを押します。
実行したアプリケーションがアクティブになり、前面に出てきて、押されたキーが表示されます。