Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencipta Hotkey Global dalam Go (Golang)?

Bagaimana untuk Mencipta Hotkey Global dalam Go (Golang)?

Patricia Arquette
Patricia Arquetteasal
2024-11-07 22:52:02295semak imbas

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

Bagaimana untuk Melaksanakan Kekunci Panas Global dalam Go (Golang)?

Mewujudkan kekunci pintas global yang berfungsi merentas platform dalam Go (Golang) melibatkan menggunakan panggilan sistem. Begini cara anda boleh mencapai ini:

1. Muatkan Pustaka Khusus Sistem Pengendalian

Pakej syscall Go membolehkan anda melakukan panggilan sistem. Walau bagaimanapun, antara muka berbeza di seluruh sistem pengendalian. Untuk mengakses dokumentasi khusus platform, jalankan:

godoc -http=:6060

Navigasi ke http://localhost:6060/pkg/syscall/ untuk mendapatkan gambaran keseluruhan terperinci.

2. Tentukan Jenis Hotkey

Buat jenis untuk mewakili hotkey dengan ID unik, pengubah suai (Alt, Ctrl, dll.) dan kod kunci.

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

3. Muatkan User32.dll pada Windows

Untuk sokongan Windows, muatkan user32.dll:

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

4. Daftar Hotkeys

Cari dan panggil fungsi RegisterHotkey() daripada user32.dll untuk mendaftar hotkeys anda. Contohnya:

// 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. Dengarkan Acara Kekunci Panas

Cari dan panggil fungsi PeekMessage() daripada user32.dll untuk mendengar tekanan kekunci global.

peekmsg := user32.MustFindProc("PeekMessageW")

6. Mengendalikan Peristiwa Hotkey

Buat gelung untuk menyemak acara hotkey secara berterusan. Jika kekunci pintas berdaftar ditekan, cetak butirannya ke konsol.

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

Dengan mengikuti langkah ini, anda boleh mencipta kekunci pintas global yang berfungsi secara konsisten merentas sistem pengendalian yang berbeza dalam Go (Golang).

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Hotkey Global dalam Go (Golang)?. 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