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; return 0;
} }
int GetFlagsFromValue(char* value[], MMKeyFlags* flags){ int GetFlagsFromValue(char* value[], MMKeyFlags* flags,int num){
if (!flags) {return -1;} if (!flags) {return -1;}
for (int i = 0; i <2; i++){ for (int i = 0; i <num; i++){
MMKeyFlags f = MOD_NONE; MMKeyFlags f = MOD_NONE;
const int rv = CheckKeyFlags(value[i], &f); const int rv = CheckKeyFlags(value[i], &f);
if (rv) return rv; 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. // 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){ char* aKeyTap(char *k,char *akey,char *akeyt){
MMKeyFlags flags = (MMKeyFlags) MOD_NONE; MMKeyFlags flags = (MMKeyFlags) MOD_NONE;
@ -198,7 +227,7 @@ char* aKeyTap(char *k,char *akey,char *akeyt){
} }
}else{ }else{
char* akeyarr[2] = {akey,akeyt}; char* akeyarr[2] = {akey,akeyt};
switch(GetFlagsFromValue(akeyarr,&flags)){ switch(GetFlagsFromValue(akeyarr,&flags,2)){
case -1: case -1:
return "Null pointer in key flag."; return "Null pointer in key flag.";
break; break;
@ -256,7 +285,7 @@ char* aKeyToggle(char *k,char *d,char *akey,char *akeyt){
} }
}else{ }else{
char* akeyarr[2] = {akey,akeyt}; char* akeyarr[2] = {akey,akeyt};
switch (GetFlagsFromValue(akeyarr, &flags)) switch (GetFlagsFromValue(akeyarr, &flags,2))
{ {
case -1: case -1:
return "Null pointer in key flag."; return "Null pointer in key flag.";

View File

@ -31,6 +31,7 @@ import "C"
import ( import (
. "fmt" . "fmt"
"reflect"
"unsafe" "unsafe"
// "runtime" // "runtime"
// "syscall" // "syscall"
@ -277,39 +278,60 @@ func Try(fun func(), handler func(interface{})) {
fun() fun()
} }
func KeyTap(args ...string) { func KeyTap(args ...interface{}) {
// func KeyTap(args ...interface{}) {
var akey string var akey string
var akeyt string var akeyt string
// var ckeyarr []*C.char // var ckeyarr []*C.char
// var keyarr []string ckeyarr := make([](*_Ctype_char), 0)
var keyarr []string
var num int
Try(func() { Try(func() {
akey = args[1] if reflect.TypeOf(args[1]) == reflect.TypeOf(keyarr) {
// for i, _ := range keyarr {
// ckeyarr = append(ckeyarr, (*C.char)(unsafe.Pointer(C.CString(keyarr[i])))) keyarr = args[1].([]string)
// }
Try(func() { num = len(keyarr)
akeyt = args[2]
}, func(e interface{}) { for i, _ := range keyarr {
// Println("err:::", e) ckeyarr = append(ckeyarr, (*C.char)(unsafe.Pointer(C.CString(keyarr[i]))))
akeyt = "null" }
})
} else {
akey = args[1].(string)
Try(func() {
akeyt = args[2].(string)
}, func(e interface{}) {
// Println("err:::", e)
akeyt = "null"
})
}
}, func(e interface{}) { }, func(e interface{}) {
// Println("err:::", e) // Println("err:::", e)
akey = "null" akey = "null"
keyarr = []string{"null"}
}) })
// }()
zkey := C.CString(args[0]) zkey := C.CString(args[0].(string))
amod := C.CString(akey)
amodt := C.CString(akeyt)
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) { func KeyToggle(args ...string) {