Heim >Backend-Entwicklung >Golang >Wie implementiert man einen globalen Hotkey in Go?

Wie implementiert man einen globalen Hotkey in Go?

Barbara Streisand
Barbara StreisandOriginal
2024-11-13 00:13:02474Durchsuche

How to Implement a Global Hotkey in Go?

Implementieren Sie einen globalen Hotkey in Go (golang)

Es ist möglich, einen plattformübergreifenden globalen Hotkey mithilfe von Aufrufen an native Betriebssystembindungen zu erstellen in Go.

Mac

Verwenden Sie addGlobalMonitorForEventsMatchingMask.

Linux

Verwenden Sie XGrabKey.

Windows

Verwenden Sie RegisterHotKey. Hier ist ein Beispiel in Go:

const (
    ModAlt = 1 << iota
    ModCtrl
    ModShift
    ModWin
)

type Hotkey struct {
    Id        int
    Modifiers int
    KeyCode   int
}

func main() {
    user32 := syscall.MustLoadDLL("user32")
    reghotkey := user32.MustFindProc("RegisterHotKey")
    keys := map[int16]*Hotkey{
        1: &Hotkey{1, ModAlt + ModCtrl, 'O'},
        2: &Hotkey{2, ModAlt + ModShift, 'M'},
        3: &Hotkey{3, ModAlt + ModCtrl, 'X'},
    }
    for _, v := range keys {
        r1, _, _ := reghotkey.Call(0, uintptr(v.Id), uintptr(v.Modifiers), uintptr(v.KeyCode))
        if r1 == 1 {
            fmt.Println("Registered", v)
        } else {
            fmt.Println("Failed to register", v)
        }
    }
    for {
        var msg = &MSG{}
        peekmsg := user32.MustFindProc("PeekMessageW")
        peekmsg.Call(uintptr(unsafe.Pointer(msg)), 0, 0, 0, 1)
        if id := msg.WPARAM; id != 0 {
            fmt.Println("Hotkey pressed:", keys[id])
            if id == 3 {
                fmt.Println("CTRL+ALT+X pressed, goodbye...")
                return
            }
        }
        time.Sleep(time.Millisecond * 50)
    }
}

Dadurch werden globale Hotkeys registriert und die Abhörschleife gibt den gedrückten Hotkey an die Konsole aus. Wenn STRG ALT X gedrückt wird, wird die Anwendung beendet.

Das obige ist der detaillierte Inhalt vonWie implementiert man einen globalen Hotkey in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn