Init: Create & Init Project...

This commit is contained in:
2019-12-31 15:10:37 +08:00
commit 5bd9fed346
6 changed files with 215 additions and 0 deletions

63
hot_key/main.go Normal file
View File

@@ -0,0 +1,63 @@
package hot_key
import (
"fmt"
winapi "github.com/lxn/win"
"syscall"
)
const (
ModAlt = 1 << iota
ModCtrl
ModShift
ModWin
)
var (
user32 = syscall.NewLazyDLL("user32")
registerHotKey = user32.NewProc("RegisterHotKey")
unregisterHotKey = user32.NewProc("UnregisterHotKey")
)
var keyHandle = map[int32]func(){0: func() {}}
func RegisterHotKey(Modifiers, KeyCode int, callback func()) (int, error) {
uid := len(keyHandle)
r1, _, err := registerHotKey.Call(0, uintptr(uid), uintptr(Modifiers), uintptr(KeyCode))
if r1 == 1 {
keyHandle[int32(uid)] = callback
return uid, nil
} else {
return 0, err
}
}
func UnregisterHotKey(uid int32) error {
r1, _, err := unregisterHotKey.Call(0, uintptr(uid))
if r1 == 1 {
return nil
} else {
return err
}
}
func UnregisterAllHotKey() {
for id, _ := range keyHandle {
_ = UnregisterHotKey(id)
}
}
func ListenHotKey() {
go func() {
msg := &winapi.MSG{}
fmt.Println("Start HotKey Listen...")
for {
winapi.GetMessage(msg, 0, 0, 0)
if msg.Message == winapi.WM_HOTKEY {
if fnc, ok := keyHandle[int32(msg.WParam)]; ok {
fnc()
}
}
}
}()
}