Pregunta

Encontré este pequeño código para registrar una tecla de acceso rápido:

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

Funciona perfectamente, pero mi problema es que quiero usar dos atajos diferentes. Sé que el segundo parámetro es la identificación, por lo que creo que podría hacer una identificación diferente y agregar una nueva declaración IF en la función wndproc, pero no estoy seguro de cómo lo haría.

En resumen, ¿cómo podría crear un segundo atajo?

Gracias,

¿Fue útil?

Solución

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

No use GethashCode () aquí. Simplemente numere sus teclas calientes, comience en 0. No hay ningún peligro de mezclar las ID, las ID de claves calientes son específicas para cada mango. Obtendrás el identificación volver en el método WNDProc (). Use m.wparam.toint32 () para obtener el valor:

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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top