お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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