Domanda

Ho trovato questo piccolo pezzo di codice per registrare un tasto di scelta rapida:

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

Funziona perfettamente, ma il mio problema è che voglio usare due collegamenti diversi. So che il secondo parametro è l'ID, quindi immagino che potrei fare un id diverso e aggiungere una nuova istruzione if nella funzione WndProc ma non sono sicuro di come vorrei andare per questo.

In breve, come potrei fare per la creazione di un secondo collegamento?

Grazie,

È stato utile?

Soluzione

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

Non utilizzare GetHashCode () qui. numero Proprio i tasti dedicati, iniziare a 0. Non c'è alcun pericolo di ottenere i ids mescolato, ids tasti di scelta rapida sono specifici per ogni maniglia. Otterrete il id di nuovo nel metodo WndProc (). Usa m.WParam.ToInt32 () per ottenere il valore:

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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top