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

Go에서 글로벌 단축키를 구현하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-13 00:13:02
원래의
478명이 탐색했습니다.

How to Implement a Global Hotkey in Go?

Go(golang)에서 전역 단축키 구현

네이티브 OS 바인딩 호출을 사용하여 크로스 플랫폼 전역 단축키를 생성할 수 있습니다. Go에서.

Mac

addGlobalMonitorForEventsMatchingMask를 사용하세요.

Linux

XGrabKey를 사용하세요.

Windows

RegisterHotKey를 사용하세요. 다음은 Go의 예입니다.

const (
    ModAlt = 1 << iota
    ModCtrl
    ModShift
    ModWin
)

type Hotkey struct {
    Id        int
    Modifiers int
    KeyCode   int
}

func main() {
    user32 := syscall.MustLoadDLL("user32")
    reghotkey := user32.MustFindProc("RegisterHotKey")
    keys := map[int16]*Hotkey{
        1: &Hotkey{1, ModAlt + ModCtrl, 'O'},
        2: &Hotkey{2, ModAlt + ModShift, 'M'},
        3: &Hotkey{3, ModAlt + ModCtrl, 'X'},
    }
    for _, v := range keys {
        r1, _, _ := 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)
        }
    }
    for {
        var msg = &MSG{}
        peekmsg := user32.MustFindProc("PeekMessageW")
        peekmsg.Call(uintptr(unsafe.Pointer(msg)), 0, 0, 0, 1)
        if id := msg.WPARAM; id != 0 {
            fmt.Println("Hotkey pressed:", keys[id])
            if id == 3 {
                fmt.Println("CTRL+ALT+X pressed, goodbye...")
                return
            }
        }
        time.Sleep(time.Millisecond * 50)
    }
}
로그인 후 복사

이것은 전역 단축키를 등록하고 청취 루프는 누른 단축키를 콘솔에 인쇄합니다. CTRL ALT X를 누르면 애플리케이션이 종료됩니다.

위 내용은 Go에서 글로벌 단축키를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿