Go (Golang) でグローバル ホットキーを実装するには?
Go (Golang) でプラットフォーム間で動作するグローバル ホットキーを作成するには、次の手順を実行します。システムコールを利用します。これを実現する方法は次のとおりです。
1.オペレーティング システム固有のライブラリをロードする
Go の syscall パッケージを使用すると、システム コールを実行できます。ただし、インターフェイスはオペレーティング システムによって異なります。プラットフォーム固有のドキュメントにアクセスするには、次のコマンドを実行します。
godoc -http=:6060
詳細な概要については、http://localhost:6060/pkg/syscall/ に移動します。
2.ホットキー タイプの定義
一意の ID、修飾子 (Alt、Ctrl など)、およびキー コードを持つホットキーを表すタイプを作成します。
type Hotkey struct { Id int // Unique id Modifiers int // Mask of modifiers KeyCode int // Key code, e.g. 'A' }
3. Windows で User32.dll をロードします
Windows サポートの場合、user32.dll をロードします:
user32 := syscall.MustLoadDLL("user32") defer user32.Release()
4.ホットキーの登録
user32.dll から RegisterHotkey() 関数を見つけて呼び出し、ホットキーを登録します。例:
// 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.ホットキー イベントをリッスンします
user32.dll から PeekMessage() 関数を見つけて呼び出し、グローバル キーの押下をリッスンします。
peekmsg := user32.MustFindProc("PeekMessageW")
6.ホットキー イベントの処理
ホットキー イベントを継続的にチェックするループを作成します。登録されたホットキーが押されると、その詳細がコンソールに出力されます。
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) }
次の手順に従うことで、Go (Golang) の異なるオペレーティング システム間で一貫して動作するグローバル ホットキーを作成できます。
以上がGo (Golang) でグローバル ホットキーを作成する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。