Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melaksanakan Kekunci Panas Global dalam Go?

Bagaimana untuk Melaksanakan Kekunci Panas Global dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-11-13 00:13:02402semak imbas

How to Implement a Global Hotkey in Go?

Laksanakan Global Hotkey in Go (golang)

Adalah mungkin untuk mencipta hotkey global merentas platform menggunakan panggilan ke pengikatan OS asli dalam Go.

Mac

Gunakan addGlobalMonitorForEventsMatchingMask.

Linux

Gunakan X🎜>

Windows

Gunakan RegisterHotKey. Berikut ialah contoh dalam Go:

const (
    ModAlt = 1 << iota
    ModCtrl
    ModShift
    ModWin
)

type Hotkey struct {
    Id        int
    Modifiers int
    KeyCode   int
}

func main() {
    user32 := syscall.MustLoadDLL("user32")
    reghotkey := user32.MustFindProc("RegisterHotKey")
    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, _, _ := 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)
        }
    }
    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)
    }
}
Ini akan mendaftarkan kekunci pintas global dan gelung mendengar akan mencetak kekunci pintas yang ditekan ke konsol. Apabila CTRL ALT X ditekan, aplikasi akan keluar.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Kekunci Panas Global dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn