ホームページ  >  記事  >  バックエンド開発  >  Go アプリケーションでグローバル ホットキーを作成するには?

Go アプリケーションでグローバル ホットキーを作成するには?

DDD
DDDオリジナル
2024-11-08 12:16:02711ブラウズ

How to Create Global Hotkeys in Go Applications?

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() を使用できます。これらについては、プラットフォーム固有のリソースとドキュメントを参照することをお勧めします。

追加のヒント

  • デバッグを容易にするために、説明的なホットキー ID を使用します。
  • ホットキー管理を簡素化するために、ライブラリまたはフレームワークの使用を検討してください。
  • テストホットキーの機能を徹底的に見直して、すべてのプラットフォームで期待どおりに動作することを確認します。

以上がGo アプリケーションでグローバル ホットキーを作成するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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