>백엔드 개발 >Golang >Go(Golang)에서 글로벌 단축키를 만드는 방법은 무엇입니까?

Go(Golang)에서 글로벌 단축키를 만드는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-07 22:52:02304검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.