update keyboard code and add key delay

This commit is contained in:
vcaesar 2017-12-24 01:56:02 +08:00
parent b55f438c1b
commit 214ac59298
2 changed files with 43 additions and 39 deletions

View File

@ -179,12 +179,12 @@ int GetFlagsFromValue(char* value[], MMKeyFlags* flags, int num){
} }
// 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){ char* key_Tap(char *k, char* keyArr[], int num, int keyDelay){
MMKeyFlags flags = MOD_NONE; MMKeyFlags flags = MOD_NONE;
// MMKeyFlags flags = 0; // MMKeyFlags flags = 0;
MMKeyCode key; MMKeyCode key;
switch(GetFlagsFromValue(keyarr, &flags, num)){ switch(GetFlagsFromValue(keyArr, &flags, num)){
// switch (CheckKeyFlags(akey, &flags)){ // switch (CheckKeyFlags(akey, &flags)){
case -1: case -1:
return "Null pointer in key flag."; return "Null pointer in key flag.";
@ -203,13 +203,13 @@ char* aKey_Tap(char *k, char* keyarr[], int num){
break; break;
default: default:
tapKeyCode(key, flags); tapKeyCode(key, flags);
microsleep(keyboardDelay); microsleep(keyDelay);
} }
return "0"; return "0";
} }
char* aKeyTap(char *k, char *akey, char *akeyt){ char* aKeyTap(char *k, char *akey, char *keyT, int keyDelay){
MMKeyFlags flags = (MMKeyFlags) MOD_NONE; MMKeyFlags flags = (MMKeyFlags) MOD_NONE;
// MMKeyFlags flags = 0; // MMKeyFlags flags = 0;
MMKeyCode key; MMKeyCode key;
@ -217,7 +217,7 @@ char* aKeyTap(char *k, char *akey, char *akeyt){
// char *k; // char *k;
// k = *kstr; // k = *kstr;
if (strcmp(akey, "null") != 0){ if (strcmp(akey, "null") != 0){
if (strcmp(akeyt, "null") == 0){ if (strcmp(keyT, "null") == 0){
switch (CheckKeyFlags(akey, &flags)){ switch (CheckKeyFlags(akey, &flags)){
case -1: case -1:
return "Null pointer in key flag."; return "Null pointer in key flag.";
@ -227,8 +227,8 @@ char* aKeyTap(char *k, char *akey, char *akeyt){
break; break;
} }
}else{ }else{
char* akeyarr[2] = {akey, akeyt}; char* akeyArr[2] = {akey, keyT};
switch(GetFlagsFromValue(akeyarr, &flags, 2)){ switch(GetFlagsFromValue(akeyArr, &flags, 2)){
case -1: case -1:
return "Null pointer in key flag."; return "Null pointer in key flag.";
break; break;
@ -248,13 +248,13 @@ char* aKeyTap(char *k, char *akey, char *akeyt){
break; break;
default: default:
tapKeyCode(key, flags); tapKeyCode(key, flags);
microsleep(keyboardDelay); microsleep(keyDelay);
} }
return "0"; return "0";
} }
char* aKeyToggle(char *k, char *d, char *akey, char *akeyt){ char* key_Toggle(char *k, char *d, char *akey, char *keyT, int keyDelay){
MMKeyFlags flags = (MMKeyFlags) MOD_NONE; MMKeyFlags flags = (MMKeyFlags) MOD_NONE;
MMKeyCode key; MMKeyCode key;
@ -275,7 +275,7 @@ char* aKeyToggle(char *k, char *d, char *akey, char *akeyt){
} }
if (strcmp(akey, "null") != 0){ if (strcmp(akey, "null") != 0){
if (strcmp(akeyt, "null") == 0){ if (strcmp(keyT, "null") == 0){
switch (CheckKeyFlags(akey, &flags)){ switch (CheckKeyFlags(akey, &flags)){
case -1: case -1:
return "Null pointer in key flag."; return "Null pointer in key flag.";
@ -285,8 +285,8 @@ char* aKeyToggle(char *k, char *d, char *akey, char *akeyt){
break; break;
} }
}else{ }else{
char* akeyarr[2] = {akey, akeyt}; char* akeyArr[2] = {akey, keyT};
switch (GetFlagsFromValue(akeyarr, &flags, 2)) switch (GetFlagsFromValue(akeyArr, &flags, 2))
{ {
case -1: case -1:
return "Null pointer in key flag."; return "Null pointer in key flag.";
@ -307,7 +307,7 @@ char* aKeyToggle(char *k, char *d, char *akey, char *akeyt){
break; break;
default: default:
toggleKeyCode(key, down, flags); toggleKeyCode(key, down, flags);
microsleep(keyboardDelay); microsleep(keyDelay);
} }
return "0"; return "0";

View File

@ -62,7 +62,7 @@ import (
) )
const ( const (
version string = "v0.47.0.447, Mount Cook!" version string = "v0.47.0.448, Mount Cook!"
) )
type ( type (
@ -489,53 +489,56 @@ func ScrollMouse(x int, y string) {
func KeyTap(args ...interface{}) { func KeyTap(args ...interface{}) {
var ( var (
akey string akey string
akeyt string keyT = "null"
keyarr []string keyArr []string
num int num int
keyDelay = 10
) )
// var ckeyArr []*C.char // var ckeyArr []*C.char
ckeyArr := make([](*_Ctype_char), 0) ckeyArr := make([](*_Ctype_char), 0)
Try(func() { Try(func() {
if reflect.TypeOf(args[1]) == reflect.TypeOf(keyarr) { if reflect.TypeOf(args[1]) == reflect.TypeOf(keyArr) {
keyarr = args[1].([]string) keyArr = args[1].([]string)
num = len(keyarr) num = len(keyArr)
for i := 0; i < num; i++ { for i := 0; i < num; i++ {
ckeyArr = append(ckeyArr, (*C.char)(unsafe.Pointer(C.CString(keyarr[i])))) ckeyArr = append(ckeyArr, (*C.char)(unsafe.Pointer(C.CString(keyArr[i]))))
} }
if len(args) > 3 {
keyDelay = args[2].(int)
}
} else { } else {
akey = args[1].(string) akey = args[1].(string)
Try(func() { if reflect.TypeOf(args[2]) == reflect.TypeOf(akey) {
akeyt = args[2].(string) keyT = args[2].(string)
} else {
}, func(e interface{}) { keyDelay = args[2].(int)
// fmt.Println("err:::", e) }
akeyt = "null"
})
} }
}, func(e interface{}) { }, func(e interface{}) {
// fmt.Println("err:::", e) // fmt.Println("err:::", e)
akey = "null" akey = "null"
keyarr = []string{"null"} keyArr = []string{"null"}
}) })
// }() // }()
zkey := C.CString(args[0].(string)) zkey := C.CString(args[0].(string))
if akey == "" && len(keyarr) != 0 { if akey == "" && len(keyArr) != 0 {
C.aKey_Tap(zkey, (**_Ctype_char)(unsafe.Pointer(&ckeyArr[0])), C.int(num)) C.key_Tap(zkey, (**_Ctype_char)(unsafe.Pointer(&ckeyArr[0])),
C.int(num),C.int(keyDelay))
} else { } else {
// zkey := C.CString(args[0]) // zkey := C.CString(args[0])
amod := C.CString(akey) amod := C.CString(akey)
amodt := C.CString(akeyt) amodt := C.CString(keyT)
C.aKeyTap(zkey, amod, amodt) C.aKeyTap(zkey, amod, amodt, C.int(keyDelay))
defer C.free(unsafe.Pointer(amod)) defer C.free(unsafe.Pointer(amod))
defer C.free(unsafe.Pointer(amodt)) defer C.free(unsafe.Pointer(amodt))
@ -552,7 +555,8 @@ func KeyToggle(args ...string) string {
var ( var (
adown string adown string
amkey string amkey string
amkeyt string mKeyT string
keyDelay = 10
) )
Try(func() { Try(func() {
@ -561,10 +565,10 @@ func KeyToggle(args ...string) string {
amkey = args[2] amkey = args[2]
Try(func() { Try(func() {
amkeyt = args[3] mKeyT = args[3]
}, func(e interface{}) { }, func(e interface{}) {
// fmt.Println("err:::", e) // fmt.Println("err:::", e)
amkeyt = "null" mKeyT = "null"
}) })
} else { } else {
amkey = "null" amkey = "null"
@ -577,16 +581,16 @@ func KeyToggle(args ...string) string {
ckey := C.CString(args[0]) ckey := C.CString(args[0])
cadown := C.CString(adown) cadown := C.CString(adown)
camkey := C.CString(amkey) camkey := C.CString(amkey)
camkeyt := C.CString(amkeyt) cmKeyT := C.CString(mKeyT)
// defer func() { // defer func() {
str := C.aKeyToggle(ckey, cadown, camkey, camkeyt) str := C.key_Toggle(ckey, cadown, camkey, cmKeyT, C.int(keyDelay))
// fmt.Println(str) // fmt.Println(str)
// C.aKeyToggle(ckey, cadown, camkey, camkeyt) // C.aKeyToggle(ckey, cadown, camkey, cmKeyT)
// }() // }()
defer C.free(unsafe.Pointer(ckey)) defer C.free(unsafe.Pointer(ckey))
defer C.free(unsafe.Pointer(cadown)) defer C.free(unsafe.Pointer(cadown))
defer C.free(unsafe.Pointer(camkey)) defer C.free(unsafe.Pointer(camkey))
defer C.free(unsafe.Pointer(camkeyt)) defer C.free(unsafe.Pointer(cmKeyT))
return C.GoString(str) return C.GoString(str)
} }