ホームページ >バックエンド開発 >Golang >Go (Golang) でグローバル ホットキーを作成する方法?

Go (Golang) でグローバル ホットキーを作成する方法?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-07 22:52:02294ブラウズ

How to Create a Global Hotkey in Go (Golang)?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。