Implémentation des raccourcis clavier globaux dans Go
Bien qu'il existe des options de bibliothèque multiplateforme limitées pour l'implémentation des raccourcis clavier globaux dans Go, il est possible d'utiliser le système appels via le package syscall. Voici comment y parvenir sur plusieurs systèmes d'exploitation, y compris Windows.
Windows
Pour enregistrer les raccourcis clavier sous Windows, nous utilisons la bibliothèque user32.dll et son RegisterHotkey( ) fonction. Voici un exemple complet :
const ( ModAlt = 1 << iota ModCtrl ModShift ModWin ) type Hotkey struct { Id int Modifiers int KeyCode int } 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) } func main() { user32 := syscall.MustLoadDLL("user32") reghotkey := user32.MustFindProc("RegisterHotKey") defer user32.Release() 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, _, 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 := 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) } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!