Heim >Backend-Entwicklung >Golang >Wie implementiert man einen plattformübergreifenden globalen Hotkey in Go?
Herausforderung:Implementieren eines plattformübergreifenden (Mac, Linux, Windows) globalen Hotkeys in Go, der reagiert auf Benutzereingaben an beliebiger Stelle im Betrieb System.
Lösung:
Mit dem Syscall-Paket kann man auf native Betriebssystemfunktionen zugreifen, um sich zu registrieren und auf globale Hotkeys zu warten.
Für Windows Insbesondere:
Beispielanwendung:
A einfache Go-Anwendung, die die Registrierung und Handhabung von Hotkeys unter Windows demonstriert:
package main import ( "fmt" "os" "time" "github.com/gonuts/syscall/՚user32" ) type Hotkey struct { Id int // Unique id Modifiers int // Mask of modifiers KeyCode int // Key code, e.g. 'A' } func (h *Hotkey) String() string { mod := &bytes.Buffer{} if h.Modifiers&ModAlt != 0 { mod.WriteString("Alt+") } if h.Modifiers&ModCtrl != 0 { mod.WriteString("Ctrl+") } if h.Modifiers&ModShift != 0 { mod.WriteString("Shift+") } if h.Modifiers&ModWin != 0 { mod.WriteString("Win+") } return fmt.Sprintf("Hotkey[Id: %d, %s%c]", h.Id, mod, h.KeyCode) } const ( ModAlt = 1 << iota ModCtrl ModShift ModWin ) func main() { user32 := syscall.MustLoadDll("user32") defer user32.Release() reghotkey := user32.MustFindProc("RegisterHotKey") peekmsg := user32.MustFindProc("PeekMessageW") keys := map[int16]*Hotkey{ 1: &Hotkey{1, ModAlt + ModCtrl, 'O'}, // ALT+CTRL+O 2: &Hotkey{2, ModAlt + ModShift, 'M'}, // ALT+SHIFT+M 3: &Hotkey{3, ModAlt + ModCtrl, 'X'}, // ALT+CTRL+X } for _, v := range keys { r1, _, err := 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, ", error:", err) } } for { var msg = &MSG{} peekmsg.Call(uintptr(unsafe.Pointer(msg)), 0, 0, 0, 1) // Registered id is in the WPARAM field: if id := msg.WPARAM; id != 0 { fmt.Println("Hotkey pressed:", keys[id]) if id == 3 { // CTRL+ALT+X = Exit fmt.Println("CTRL+ALT+X pressed, goodbye...") os.Exit(0) } } time.Sleep(time.Millisecond * 50) } }
Dieses Beispiel bietet eine vollständige Implementierung der Registrierung und Handhabung von Hotkeys unter Windows. die nach ähnlichen Prinzipien für andere Betriebssysteme angepasst werden können.
Das obige ist der detaillierte Inhalt vonWie implementiert man einen plattformübergreifenden globalen Hotkey in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!