mirror of https://github.com/OrbTools/OrbMap
refactor
parent
8bb332a540
commit
2d99f7f889
@ -1,29 +1,31 @@
|
||||
package keypad
|
||||
|
||||
import (
|
||||
"github.com/bendahl/uinput"
|
||||
"github.com/minizbot2012/orbmap/interface/keyevents"
|
||||
)
|
||||
|
||||
var vkm uinput.Keyboard = nil
|
||||
|
||||
//ProcKey keyboard emulator loop
|
||||
func ProcKey(kb chan *keyevents.KeyEvent) {
|
||||
var err error
|
||||
vkm, err = uinput.CreateKeyboard("/dev/uinput", []byte("Orbmap"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer vkm.Close()
|
||||
for {
|
||||
KeyEv := <-kb
|
||||
if KeyEv.Type == 1 {
|
||||
if KeyEv.Value == 1 {
|
||||
vkm.KeyDown(int(KeyEv.Code))
|
||||
} else if KeyEv.Value == 2 {
|
||||
} else {
|
||||
vkm.KeyUp(int(KeyEv.Code))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//build:+linux
|
||||
|
||||
package emu
|
||||
|
||||
import (
|
||||
"github.com/bendahl/uinput"
|
||||
"github.com/minizbot2012/orbmap/interface/keyevents"
|
||||
)
|
||||
|
||||
var vkm uinput.Keyboard = nil
|
||||
|
||||
//ProcKey keyboard emulator loop
|
||||
func ProcKey(kb chan *keyevents.KeyEvent) {
|
||||
var err error
|
||||
vkm, err = uinput.CreateKeyboard("/dev/uinput", []byte("Orbmap"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer vkm.Close()
|
||||
for {
|
||||
KeyEv := <-kb
|
||||
if KeyEv.Type == 1 {
|
||||
if KeyEv.Value == 1 {
|
||||
vkm.KeyDown(int(KeyEv.Code))
|
||||
} else if KeyEv.Value == 2 {
|
||||
} else {
|
||||
vkm.KeyUp(int(KeyEv.Code))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,58 +1,60 @@
|
||||
package keypad
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
"github.com/lxn/win"
|
||||
"github.com/minizbot2012/orbmap/interface/keyevents"
|
||||
)
|
||||
|
||||
var user32 = syscall.NewLazyDLL("user32.dll")
|
||||
var procKeyBd = user32.NewProc("keybd_event")
|
||||
var mapVK = user32.NewProc("MapVirtualKeyA")
|
||||
|
||||
func downKey(key int) {
|
||||
flag := 0
|
||||
var in win.KEYBD_INPUT
|
||||
vs, _, _ := mapVK.Call(uintptr(uint32(key)), uintptr(1))
|
||||
vsc := uint16(vs)
|
||||
println(vsc)
|
||||
if vsc == win.VK_SHIFT || vsc == win.VK_CONTROL || vsc == win.VK_MENU {
|
||||
flag |= win.KEYEVENTF_EXTENDEDKEY
|
||||
}
|
||||
in.Type = 1
|
||||
in.Ki.DwExtraInfo = 0
|
||||
in.Ki.DwFlags = uint32(flag)
|
||||
in.Ki.WScan = 0
|
||||
in.Ki.WVk = vsc
|
||||
|
||||
win.SendInput(1, unsafe.Pointer(&in), int32(unsafe.Sizeof(in)))
|
||||
}
|
||||
func upKey(key int) {
|
||||
flag := win.KEYEVENTF_KEYUP
|
||||
var in win.KEYBD_INPUT
|
||||
vs, _, _ := mapVK.Call(uintptr(uint32(key)), uintptr(1))
|
||||
vsc := uint16(vs)
|
||||
if vsc == win.VK_SHIFT || vsc == win.VK_CONTROL || vsc == win.VK_MENU {
|
||||
flag |= win.KEYEVENTF_EXTENDEDKEY
|
||||
}
|
||||
in.Type = 1
|
||||
in.Ki.DwExtraInfo = 0
|
||||
in.Ki.DwFlags = uint32(flag)
|
||||
in.Ki.WScan = 0
|
||||
in.Ki.WVk = vsc
|
||||
win.SendInput(1, unsafe.Pointer(&in), int32(unsafe.Sizeof(in)))
|
||||
}
|
||||
|
||||
//ProcKey Windows support is so weird
|
||||
func ProcKey(kb chan *keyevents.KeyEvent) {
|
||||
for {
|
||||
KeyEv := <-kb
|
||||
if KeyEv.Type == 1 {
|
||||
downKey(int(KeyEv.Code))
|
||||
} else if KeyEv.Type == 2 {
|
||||
upKey(int(KeyEv.Code))
|
||||
}
|
||||
}
|
||||
}
|
||||
//build:+windows
|
||||
|
||||
package emu
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
"github.com/OrbTools/orbmap/interface/keyevents"
|
||||
"github.com/lxn/win"
|
||||
)
|
||||
|
||||
var user32 = syscall.NewLazyDLL("user32.dll")
|
||||
var procKeyBd = user32.NewProc("keybd_event")
|
||||
var mapVK = user32.NewProc("MapVirtualKeyA")
|
||||
|
||||
func downKey(key int) {
|
||||
flag := 0
|
||||
var in win.KEYBD_INPUT
|
||||
vs, _, _ := mapVK.Call(uintptr(uint32(key)), uintptr(1))
|
||||
vsc := uint16(vs)
|
||||
println(vsc)
|
||||
if vsc == win.VK_SHIFT || vsc == win.VK_CONTROL || vsc == win.VK_MENU {
|
||||
flag |= win.KEYEVENTF_EXTENDEDKEY
|
||||
}
|
||||
in.Type = 1
|
||||
in.Ki.DwExtraInfo = 0
|
||||
in.Ki.DwFlags = uint32(flag)
|
||||
in.Ki.WScan = 0
|
||||
in.Ki.WVk = vsc
|
||||
|
||||
win.SendInput(1, unsafe.Pointer(&in), int32(unsafe.Sizeof(in)))
|
||||
}
|
||||
func upKey(key int) {
|
||||
flag := win.KEYEVENTF_KEYUP
|
||||
var in win.KEYBD_INPUT
|
||||
vs, _, _ := mapVK.Call(uintptr(uint32(key)), uintptr(1))
|
||||
vsc := uint16(vs)
|
||||
if vsc == win.VK_SHIFT || vsc == win.VK_CONTROL || vsc == win.VK_MENU {
|
||||
flag |= win.KEYEVENTF_EXTENDEDKEY
|
||||
}
|
||||
in.Type = 1
|
||||
in.Ki.DwExtraInfo = 0
|
||||
in.Ki.DwFlags = uint32(flag)
|
||||
in.Ki.WScan = 0
|
||||
in.Ki.WVk = vsc
|
||||
win.SendInput(1, unsafe.Pointer(&in), int32(unsafe.Sizeof(in)))
|
||||
}
|
||||
|
||||
//ProcKey Windows support is so weird
|
||||
func ProcKey(kb chan *keyevents.KeyEvent) {
|
||||
for {
|
||||
KeyEv := <-kb
|
||||
if KeyEv.Type == 1 {
|
||||
downKey(int(KeyEv.Code))
|
||||
} else if KeyEv.Type == 2 {
|
||||
upKey(int(KeyEv.Code))
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue