mirror of
https://github.com/go-vgo/robotgo.git
synced 2025-06-01 06:33:56 +00:00
Update KeyTap, Support []string & string
This commit is contained in:
parent
0e09bcb5ba
commit
6cfbf8e2bf
37
key/goKey.h
37
key/goKey.h
@ -163,10 +163,10 @@ int CheckKeyFlags(char* f, MMKeyFlags* flags)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int GetFlagsFromValue(char* value[], MMKeyFlags* flags){
|
||||
int GetFlagsFromValue(char* value[], MMKeyFlags* flags,int num){
|
||||
if (!flags) {return -1;}
|
||||
|
||||
for (int i = 0; i <2; i++){
|
||||
for (int i = 0; i <num; i++){
|
||||
MMKeyFlags f = MOD_NONE;
|
||||
const int rv = CheckKeyFlags(value[i], &f);
|
||||
if (rv) return rv;
|
||||
@ -178,6 +178,35 @@ int GetFlagsFromValue(char* value[], MMKeyFlags* flags){
|
||||
}
|
||||
|
||||
// If it's not an array, it should be a single string value.
|
||||
char* aKey_Tap(char *k,char* keyarr[],int num){
|
||||
MMKeyFlags flags = MOD_NONE;
|
||||
// MMKeyFlags flags = 0;
|
||||
MMKeyCode key;
|
||||
|
||||
switch(GetFlagsFromValue(keyarr,&flags,num)){
|
||||
// switch (CheckKeyFlags(akey,&flags)){
|
||||
case -1:
|
||||
return "Null pointer in key flag.";
|
||||
break;
|
||||
case -2:
|
||||
return "Invalid key flag specified.";
|
||||
break;
|
||||
}
|
||||
|
||||
switch(CheckKeyCodes(k, &key)){
|
||||
case -1:
|
||||
return "Null pointer in key code.";
|
||||
break;
|
||||
case -2:
|
||||
return "Invalid key code specified.";
|
||||
break;
|
||||
default:
|
||||
tapKeyCode(key, flags);
|
||||
microsleep(keyboardDelay);
|
||||
}
|
||||
|
||||
return "0";
|
||||
}
|
||||
|
||||
char* aKeyTap(char *k,char *akey,char *akeyt){
|
||||
MMKeyFlags flags = (MMKeyFlags) MOD_NONE;
|
||||
@ -198,7 +227,7 @@ char* aKeyTap(char *k,char *akey,char *akeyt){
|
||||
}
|
||||
}else{
|
||||
char* akeyarr[2] = {akey,akeyt};
|
||||
switch(GetFlagsFromValue(akeyarr,&flags)){
|
||||
switch(GetFlagsFromValue(akeyarr,&flags,2)){
|
||||
case -1:
|
||||
return "Null pointer in key flag.";
|
||||
break;
|
||||
@ -256,7 +285,7 @@ char* aKeyToggle(char *k,char *d,char *akey,char *akeyt){
|
||||
}
|
||||
}else{
|
||||
char* akeyarr[2] = {akey,akeyt};
|
||||
switch (GetFlagsFromValue(akeyarr, &flags))
|
||||
switch (GetFlagsFromValue(akeyarr, &flags,2))
|
||||
{
|
||||
case -1:
|
||||
return "Null pointer in key flag.";
|
||||
|
62
robotgo.go
62
robotgo.go
@ -31,6 +31,7 @@ import "C"
|
||||
|
||||
import (
|
||||
. "fmt"
|
||||
"reflect"
|
||||
"unsafe"
|
||||
// "runtime"
|
||||
// "syscall"
|
||||
@ -277,39 +278,60 @@ func Try(fun func(), handler func(interface{})) {
|
||||
fun()
|
||||
}
|
||||
|
||||
func KeyTap(args ...string) {
|
||||
// func KeyTap(args ...interface{}) {
|
||||
func KeyTap(args ...interface{}) {
|
||||
var akey string
|
||||
var akeyt string
|
||||
// var ckeyarr []*C.char
|
||||
// var keyarr []string
|
||||
ckeyarr := make([](*_Ctype_char), 0)
|
||||
var keyarr []string
|
||||
var num int
|
||||
|
||||
Try(func() {
|
||||
akey = args[1]
|
||||
// for i, _ := range keyarr {
|
||||
// ckeyarr = append(ckeyarr, (*C.char)(unsafe.Pointer(C.CString(keyarr[i]))))
|
||||
// }
|
||||
Try(func() {
|
||||
akeyt = args[2]
|
||||
}, func(e interface{}) {
|
||||
// Println("err:::", e)
|
||||
akeyt = "null"
|
||||
})
|
||||
if reflect.TypeOf(args[1]) == reflect.TypeOf(keyarr) {
|
||||
|
||||
keyarr = args[1].([]string)
|
||||
|
||||
num = len(keyarr)
|
||||
|
||||
for i, _ := range keyarr {
|
||||
ckeyarr = append(ckeyarr, (*C.char)(unsafe.Pointer(C.CString(keyarr[i]))))
|
||||
}
|
||||
|
||||
} else {
|
||||
akey = args[1].(string)
|
||||
|
||||
Try(func() {
|
||||
akeyt = args[2].(string)
|
||||
|
||||
}, func(e interface{}) {
|
||||
// Println("err:::", e)
|
||||
akeyt = "null"
|
||||
})
|
||||
}
|
||||
|
||||
}, func(e interface{}) {
|
||||
// Println("err:::", e)
|
||||
akey = "null"
|
||||
keyarr = []string{"null"}
|
||||
})
|
||||
// }()
|
||||
|
||||
zkey := C.CString(args[0])
|
||||
amod := C.CString(akey)
|
||||
amodt := C.CString(akeyt)
|
||||
zkey := C.CString(args[0].(string))
|
||||
|
||||
C.aKeyTap(zkey, amod, amodt)
|
||||
if akey == "" && len(keyarr) != 0 {
|
||||
C.aKey_Tap(zkey, (**_Ctype_char)(unsafe.Pointer(&ckeyarr[0])), C.int(num))
|
||||
} else {
|
||||
// zkey := C.CString(args[0])
|
||||
amod := C.CString(akey)
|
||||
amodt := C.CString(akeyt)
|
||||
|
||||
C.aKeyTap(zkey, amod, amodt)
|
||||
|
||||
defer C.free(unsafe.Pointer(zkey))
|
||||
defer C.free(unsafe.Pointer(amod))
|
||||
defer C.free(unsafe.Pointer(amodt))
|
||||
}
|
||||
|
||||
defer C.free(unsafe.Pointer(zkey))
|
||||
defer C.free(unsafe.Pointer(amod))
|
||||
defer C.free(unsafe.Pointer(amodt))
|
||||
}
|
||||
|
||||
func KeyToggle(args ...string) {
|
||||
|
Loading…
Reference in New Issue
Block a user