Frage

Ich fand dieses kleine Stück Code, der einen Hotkey registrieren:

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

Es funktioniert perfekt, aber mein Problem ist, ich zwei verschiedene Verknüpfungen verwenden möchten. Ich weiß, dass der zweite Parameter die ID ist, so dass ich denke, ich könnte eine andere id machen und eine neue if-Anweisung in der WndProc Funktion hinzufügen, aber ich bin nicht sicher, wie ich darüber gehen würde.

Kurz gesagt, wie würde ich mich über eine zweite Verknüpfung zu erstellen?

Danke,

War es hilfreich?

Lösung

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

Verwenden Sie GetHashCode () nicht hier. Gerade Anzahl Ihre Hotkeys, beginnt bei 0. Es gibt keine Gefahr, die ids immer gemischt, Hot-Key-IDs sind spezifisch für jeden Handgriff. Sie werden die id bekommen zurück in den WndProc () -Methode. Verwenden m.WParam.ToInt32 (), um den Wert zu erhalten:

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top