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

Bagaimana untuk Mencipta Hotkey Global dalam Go (Golang)?

Patricia Arquette
Lepaskan: 2024-11-07 22:52:02
asal
318 orang telah melayarinya

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
Salin selepas log masuk

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'
}
Salin selepas log masuk

3. Muatkan User32.dll pada Windows

Untuk sokongan Windows, muatkan user32.dll:

user32 := syscall.MustLoadDLL("user32")
defer user32.Release()
Salin selepas log masuk

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)
    }
}
Salin selepas log masuk

5. Dengarkan Acara Kekunci Panas

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

peekmsg := user32.MustFindProc("PeekMessageW")
Salin selepas log masuk

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)
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan