7

ホットキーを登録するためのこの小さなコードを見つけました:

    [DllImport("user32.dll")]
    public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x0312)
            MessageBox.Show("Hotkey pressed");
        base.WndProc(ref m);
    }

    public FormMain()
    {
        InitializeComponent();
        //Alt + A
        RegisterHotKey(this.Handle, this.GetType().GetHashCode(), 1, (int)'A');
    }

それは完全に機能しますが、私の問題は、2 つの異なるショートカットを使用したいということです。2 番目のパラメーターが id であることはわかっているので、別の id を作成して WndProc 関数に新しい if ステートメントを追加できると思いますが、どうすればよいかわかりません。

要するに、2 つ目のショートカットを作成するにはどうすればよいでしょうか。

ありがとう、

4

1 に答える 1

15
 RegisterHotKey(this.Handle, this.GetType().GetHashCode(), 1, (int)'A')

ここでは GetHashCode() を使用しないでください。ホット キーに 0 から番号を付けてください。ID を混同する危険はありません。ホット キー ID はハンドルごとに固有です。WndProc() メソッドでIDを取得します。m.WParam.ToInt32() を使用して値を取得します。

protected override void WndProc(ref Message m)
{
    if (m.Msg == 0x0312) {    // Trap WM_HOTKEY
        int id = m.WParam.ToInt32();
        MessageBox.Show(string.Format("Hotkey #{0} pressed", id));
    }
    base.WndProc(ref m);
}
于 2011-01-16T14:44:20.977 に答える