Maison >développement back-end >Golang >Comment créer un raccourci clavier global dans Go (Golang) ?

Comment créer un raccourci clavier global dans Go (Golang) ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-07 22:52:02297parcourir

How to Create a Global Hotkey in Go (Golang)?

Comment implémenter un raccourci clavier global dans Go (Golang) ?

Créer un raccourci clavier global qui fonctionne sur toutes les plates-formes dans Go (Golang) implique accéder aux appels système. Voici comment y parvenir :

1. Charger des bibliothèques spécifiques au système d'exploitation

Le package syscall de Go vous permet d'effectuer des appels système. Cependant, l'interface varie selon les systèmes d'exploitation. Pour accéder à la documentation spécifique à la plate-forme, exécutez :

godoc -http=:6060

Naviguez vers http://localhost:6060/pkg/syscall/ pour un aperçu détaillé.

2. Définir le type de raccourci clavier

Créez un type pour représenter les raccourcis clavier avec un identifiant unique, des modificateurs (Alt, Ctrl, etc.) et un code clé.

type Hotkey struct {
    Id        int // Unique id
    Modifiers int // Mask of modifiers
    KeyCode   int // Key code, e.g. 'A'
}

3. Chargez User32.dll sous Windows

Pour la prise en charge de Windows, chargez user32.dll :

user32 := syscall.MustLoadDLL("user32")
defer user32.Release()

4. Enregistrez les raccourcis clavier

Recherchez et appelez la fonction RegisterHotkey() à partir de user32.dll pour enregistrer vos raccourcis clavier. Par exemple :

// Hotkeys to listen to:
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
}

// Register hotkeys:
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)
    }
}

5. Écoutez les événements de raccourci clavier

Recherchez et appelez la fonction PeekMessage() à partir de user32.dll pour écouter les pressions sur les touches globales.

peekmsg := user32.MustFindProc("PeekMessageW")

6. Gérer les événements de raccourci clavier

Créez une boucle pour vérifier en permanence les événements de raccourci clavier. Si un raccourci clavier enregistré est enfoncé, imprimez ses détails sur la console.

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...")
            return
        }
    }

    time.Sleep(time.Millisecond * 50)
}

En suivant ces étapes, vous pouvez créer un raccourci clavier global qui fonctionne de manière cohérente sur différents systèmes d'exploitation dans Go (Golang).

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn