Update KeyTap, Support []string & string

This commit is contained in:
vCaesar 2016-11-14 18:07:54 +08:00
parent 0e09bcb5ba
commit 6cfbf8e2bf
2 changed files with 75 additions and 24 deletions

View File

@ -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.";

View File

@ -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) {