Melaksanakan Kekunci Panas Global dalam Go
Walaupun terdapat pilihan perpustakaan merentas platform yang terhad untuk melaksanakan kekunci pintas global dalam Go, adalah mungkin menggunakan sistem panggilan melalui pakej syscall. Begini cara anda boleh mencapai ini pada berbilang sistem pengendalian, termasuk Windows.
Windows
Untuk mendaftarkan kekunci pintas dalam Windows, kami menggunakan perpustakaan user32.dll dan RegisterHotkey( ) fungsi. Berikut ialah contoh lengkap:
const ( ModAlt = 1 << iota ModCtrl ModShift ModWin ) type Hotkey struct { Id int Modifiers int KeyCode int } func (h *Hotkey) String() string { mod := &bytes.Buffer{} if h.Modifiers&ModAlt != 0 { mod.WriteString("Alt+") } if h.Modifiers&ModCtrl != 0 { mod.WriteString("Ctrl+") } if h.Modifiers&ModShift != 0 { mod.WriteString("Shift+") } if h.Modifiers&ModWin != 0 { mod.WriteString("Win+") } return fmt.Sprintf("Hotkey[Id: %d, %s%c]", h.Id, mod, h.KeyCode) } func main() { user32 := syscall.MustLoadDLL("user32") reghotkey := user32.MustFindProc("RegisterHotKey") defer user32.Release() 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, _, 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) } } 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) } }
Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan kekunci pintas global dalam Go merentasi berbilang sistem pengendalian, termasuk Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!