Maison > Article > développement back-end > Comment implémenter un raccourci clavier global multiplateforme dans Go ?
Défi : Implémentation d'un raccourci clavier global multiplateforme (Mac, Linux, Windows) dans Go qui répond à la saisie de l'utilisateur n'importe où dans le système d'exploitation.
Solution :
En utilisant le package syscall, on peut accéder aux fonctions natives du système d'exploitation pour s'inscrire et écouter les raccourcis clavier globaux.
Pour Windows spécifiquement :
Exemple d'application :
A Application Go simple qui démontre l'enregistrement et la gestion des raccourcis clavier sous Windows :
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) } }
Cet exemple fournit une implémentation complète de l'enregistrement et de la gestion des raccourcis clavier sous Windows, qui peut être adaptée pour d'autres systèmes d'exploitation utilisant des principes similaires.
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!