Heim >Backend-Entwicklung >Golang >Wie erstelle ich einen globalen Hotkey in Go (Golang)?

Wie erstelle ich einen globalen Hotkey in Go (Golang)?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-07 22:52:02357Durchsuche

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

Wie implementiert man einen globalen Hotkey in Go (Golang)?

Das Erstellen eines globalen Hotkeys, der plattformübergreifend in Go (Golang) funktioniert, erfordert Folgendes Abhören von Systemaufrufen. So können Sie das erreichen:

1. Betriebssystemspezifische Bibliotheken laden

Mit dem Syscall-Paket von Go können Sie Systemaufrufe durchführen. Allerdings variiert die Schnittstelle je nach Betriebssystem. Um auf die plattformspezifische Dokumentation zuzugreifen, führen Sie Folgendes aus:

godoc -http=:6060

Navigieren Sie zu http://localhost:6060/pkg/syscall/ für eine detaillierte Übersicht.

2. Hotkey-Typ definieren

Erstellen Sie einen Typ zur Darstellung von Hotkeys mit einer eindeutigen ID, Modifikatoren (Alt, Strg usw.) und einem Tastencode.

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

3. Laden Sie User32.dll unter Windows

Für Windows-Unterstützung laden Sie die user32.dll:

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

4. Hotkeys registrieren

Suchen Sie die Funktion RegisterHotkey() aus user32.dll und rufen Sie sie auf, um Ihre Hotkeys zu registrieren. Zum Beispiel:

// 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. Auf Hotkey-Ereignisse achten

Suchen und rufen Sie die PeekMessage()-Funktion von user32.dll auf, um auf globale Tastendrücke zu warten.

peekmsg := user32.MustFindProc("PeekMessageW")

6. Hotkey-Ereignisse verarbeiten

Erstellen Sie eine Schleife, um kontinuierlich nach Hotkey-Ereignissen zu suchen. Wenn ein registrierter Hotkey gedrückt wird, drucken Sie dessen Details auf der Konsole aus.

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)
}

Durch Befolgen dieser Schritte können Sie einen globalen Hotkey erstellen, der auf verschiedenen Betriebssystemen in Go (Golang) konsistent funktioniert.

Das obige ist der detaillierte Inhalt vonWie erstelle ich einen globalen Hotkey in Go (Golang)?. 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