How to Implement a Global Hotkey in Go (Golang)?
Creating a global hotkey that works across platforms in Go (Golang) involves tapping into system calls. Here's how you can achieve this:
1. Load Operating System-Specific Libraries
Go's syscall package allows you to perform system calls. However, the interface varies across operating systems. To access platform-specific documentation, run:
godoc -http=:6060
Navigate to http://localhost:6060/pkg/syscall/ for a detailed overview.
2. Define Hotkey Type
Create a type to represent hotkeys with a unique ID, modifiers (Alt, Ctrl, etc.), and a key code.
type Hotkey struct { Id int // Unique id Modifiers int // Mask of modifiers KeyCode int // Key code, e.g. 'A' }
3. Load User32.dll on Windows
For Windows support, load the user32.dll:
user32 := syscall.MustLoadDLL("user32") defer user32.Release()
4. Register Hotkeys
Find and call the RegisterHotkey() function from user32.dll to register your hotkeys. For example:
// 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. Listen for Hotkey Events
Find and call the PeekMessage() function from user32.dll to listen for global key presses.
peekmsg := user32.MustFindProc("PeekMessageW")
6. Handle Hotkey Events
Create a loop to continuously check for hotkey events. If a registered hotkey is pressed, print its details to the console.
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) }
By following these steps, you can create a global hotkey that works consistently across different operating systems in Go (Golang).
The above is the detailed content of How to Create a Global Hotkey in Go (Golang)?. For more information, please follow other related articles on the PHP Chinese website!