使用RegisterHotKey注册多个热键

时间:2011-01-16 06:21:02

标签: c# hotkeys registerhotkey

我找到了这段代码来注册一个热键:

    [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');
    }

它运作完美,但我的问题是我想使用两个不同的快捷方式。我知道第二个参数是id,所以我想我可以创建一个不同的id并在WndProc函数中添加一个新的if语句但是我不确定我会怎么做。

简而言之,我将如何创建第二个快捷方式?

谢谢,

1 个答案:

答案 0 :(得分:15)

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

此处不要使用GetHashCode()。只需为您的热键编号,从0开始。没有任何混淆的危险,热键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);
}