Зарегистрируйте более одной горячей клавиши с RegisterHotKey

StackOverflow https://stackoverflow.com/questions/4704134

  •  11-10-2019
  •  | 
  •  

Вопрос

Я нашел этот маленький кусок кода, чтобы зарегистрировать горячую клавишу:

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

Это работает отлично, но моя проблема в том, что я хочу использовать два разных ярлыка. Я знаю, что второй параметр - это идентификатор, поэтому я полагаю, что я мог бы сделать другой идентификатор и добавить новый оператор, если в функции Wndproc, но я не уверен, как я бы это сделал.

Короче говоря, как я бы создал второй ярлык?

Спасибо,

Это было полезно?

Решение

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

Не используйте Gethashcode () здесь. Просто номер своих горячих клавиш, начните с 0. Нет никакой опасности, чтобы сместить идентификаторы смешанных, идентификаторы горячих ключей являются специфическими для каждой ручки. Вы получите я бы Вернуться в метод wndproc (). Используйте 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top