Go でグローバル ホットキーを実装するには?
はじめに
グローバル ホットキーの作成はGo でクロスプラットフォーム アプリケーションを開発する場合に役立つテクニックです。これにより、どのアプリケーションにフォーカスがあるかに関係なく、トリガーできるホットキー ショートカットを定義できます。ただし、現時点では Go にはこれに対応する標準ライブラリはありません。この記事では、さまざまなプラットフォームでグローバル ホットキーの実装を実現する方法について説明します。
Windows
Windows の場合、user32.dll ライブラリを利用してホットキー イベントを登録し、リッスンします。具体的には、RegisterHotkey() を使用してホットキーを登録し、PeekMessage() を使用してそのアクティブ化を監視します。コード スニペットの例を次に示します。
import ( "fmt" "syscall" "time" "unsafe" ) const ( ModAlt = 1 << iota ModCtrl ModShift ModWin ) type Hotkey struct { Id int Modifiers int KeyCode int } func main() { user32 := syscall.MustLoadDLL("user32") // Register a hotkey: ALT+CTRL+O, with ID 1 reghotkey := user32.MustFindProc("RegisterHotKey") r1, _, err := reghotkey.Call(0, uintptr(1), uintptr(ModAlt+ModCtrl), uintptr('O')) if r1 == 1 { fmt.Println("Registered Hotkey[Id: 1, Alt+Ctrl+O]") } else { fmt.Println("Failed to register Hotkey[Id: 1, Alt+Ctrl+O]:", err) } // Monitor hotkey events peekmsg := user32.MustFindProc("PeekMessageW") for { var msg &MSG{} peekmsg.Call(uintptr(unsafe.Pointer(&msg)), 0, 0, 0, 1) // Check if a registered hotkey was pressed if id := msg.WPARAM; id != 0 { fmt.Println("Hotkey pressed:", id, getHotkeyById(id)) } time.Sleep(time.Millisecond * 50) } }
この例では、ALT CTRL O ホットキーを登録し、そのアクティブ化を監視します。押すと、「ホットキーが押されました:」とホットキーの ID と説明がコンソールに表示されます。
その他のプラットフォーム
同様のアプローチは他のプラットフォームでも使用できます。プラットフォームも同様です。 Linux の場合は、Xlib の XGrabKey() 関数を使用できます。 macOS の場合は、addGlobalMonitorForEventsMatchingMask() を使用できます。これらについては、プラットフォーム固有のリソースとドキュメントを参照することをお勧めします。
追加のヒント
以上がGo アプリケーションでグローバル ホットキーを作成するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。