15c15,18
< SendKeys("hello",5,0);
---
> char *str = "echo hello worldR";
> printf("%s %d\n",str,strlen(str));
> SendKeys(str,strlen(str),0);
> //SendKeys("v",1,kCtrl|kShift);
17a21,35
> // alt l r
> // ctrl l r
> // lwin rwin
> // back delete end insert home
> // return tab
> //
> const WORD specials[26] = {
> VK_MENU,VK_BACK,VK_CONTROL,VK_DELETE,VK_END, // A-E
> VK_LMENU,VK_RMENU,VK_HOME,VK_INSERT,0, // FGHIJ
> VK_LCONTROL,VK_RCONTROL,VK_LWIN,VK_RWIN,VK_APPS, // KLMNO
> VK_CAPITAL,VK_PAUSE,VK_RETURN,VK_SNAPSHOT,VK_TAB,// PQRST
> VK_PRIOR,VK_NEXT,// UV
> VK_LEFT,VK_RIGHT,VK_UP,VK_DOWN // WXYZ
> };
>
19,20c37
< // ignore modifiers for now
< INPUT* inputs = (INPUT*)calloc(nkeys,sizeof(INPUT));
---
> INPUT* inputs = (INPUT*)calloc(nkeys+8,sizeof(INPUT));
22c39,64
< for( int i=0; i<nkeys; i++ ) {
---
> int j = 0;
> if( modifiers & kShift ) {
> printf("shift\n");
> inputs[j].type = INPUT_KEYBOARD;
> inputs[j].ki.wVk = VK_SHIFT;
> j++;
> }
> if( modifiers & kCtrl ) {
> printf("ctrl\n");
> inputs[j].type = INPUT_KEYBOARD;
> inputs[j].ki.wVk = VK_CONTROL;
> j++;
> }
> if( modifiers & kAlt ) {
> printf("alt\n");
> inputs[j].type = INPUT_KEYBOARD;
> inputs[j].ki.wVk = VK_MENU;
> j++;
> }
> if( modifiers & kMeta ) {
> printf("meta\n");
> inputs[j].type = INPUT_KEYBOARD;
> inputs[j].ki.wVk = VK_LWIN;
> j++;
> }
> for(int i=0; i<nkeys; i++ ) {
23a66
> printf("send %c == %x\n",k,k);
25,30c68,75
< k -= 'a' - 'A';
< inputs[2*i].type = INPUT_KEYBOARD;
< inputs[2*i].ki.wVk = k;
< inputs[2*i+1].type = INPUT_KEYBOARD;
< inputs[2*i+1].ki.wVk = k;
< inputs[2*i+1].ki.dwFlags = KEYEVENTF_KEYUP;
---
> char s = k - ('a' - 'A');
> printf("char '%c' == '%c' == %x\n",k,s,s);
> inputs[j].type = INPUT_KEYBOARD;
> inputs[j].ki.wVk = s;
> inputs[j+1].type = INPUT_KEYBOARD;
> inputs[j+1].ki.wVk = s;
> inputs[j+1].ki.dwFlags = KEYEVENTF_KEYUP;
> j += 2;
32,36c77,87
< inputs[2*i].type = INPUT_KEYBOARD;
< inputs[2*i].ki.wVk = k;
< inputs[2*i+1].type = INPUT_KEYBOARD;
< inputs[2*i+1].ki.wVk = k;
< inputs[2*i+1].ki.dwFlags = KEYEVENTF_KEYUP;
---
> char s = k-'A';
> printf("special %d = %x\n",k,s);
> k = specials[k-'A'];
> if( k ) {
> inputs[j].type = INPUT_KEYBOARD;
> inputs[j].ki.wVk = k;
> inputs[j+1].type = INPUT_KEYBOARD;
> inputs[j+1].ki.wVk = k;
> inputs[j+1].ki.dwFlags = KEYEVENTF_KEYUP;
> j += 2;
> }
38,43c89,130
< inputs[2*i].type = INPUT_KEYBOARD;
< inputs[2*i].ki.wVk = k;
< inputs[2*i+1].type = INPUT_KEYBOARD;
< inputs[2*i+1].ki.wVk = k;
< inputs[2*i+1].ki.dwFlags = KEYEVENTF_KEYUP;
< }
---
> inputs[j].type = INPUT_KEYBOARD;
> inputs[j].ki.wVk = k;
> inputs[j+1].type = INPUT_KEYBOARD;
> inputs[j+1].ki.wVk = k;
> inputs[j+1].ki.dwFlags = KEYEVENTF_KEYUP;
> j += 2;
> } else if( k == ' ' || k == '-' || k == '=' || k == ';' || k == '\'' || k == '#' || k == ',' || k == '.' || k == '/' || k == '\\' || k == '`' ) {
> inputs[j].type = INPUT_KEYBOARD;
> inputs[j].ki.wVk = k;
> inputs[j+1].type = INPUT_KEYBOARD;
> inputs[j+1].ki.wVk = k;
> inputs[j+1].ki.dwFlags = KEYEVENTF_KEYUP;
> j += 2;
> }
> }
> if( modifiers & kMeta ) {
> printf("meta up\n");
> inputs[j].type = INPUT_KEYBOARD;
> inputs[j].ki.wVk = VK_LWIN;
> inputs[j].ki.dwFlags = KEYEVENTF_KEYUP;
> j++;
> }
> if( modifiers & kAlt ) {
> printf("alt up\n");
> inputs[j].type = INPUT_KEYBOARD;
> inputs[j].ki.wVk = VK_MENU;
> inputs[j].ki.dwFlags = KEYEVENTF_KEYUP;
> j++;
> }
> if( modifiers & kCtrl ) {
> printf("ctrl up\n");
> inputs[j].type = INPUT_KEYBOARD;
> inputs[j].ki.wVk = VK_CONTROL;
> inputs[j].ki.dwFlags = KEYEVENTF_KEYUP;
> j++;
> }
> if( modifiers & kShift ) {
> printf("shift up\n");
> inputs[j].type = INPUT_KEYBOARD;
> inputs[j].ki.wVk = VK_SHIFT;
> inputs[j].ki.dwFlags = KEYEVENTF_KEYUP;
> j++;
46,47c133,134
< UINT uSent = SendInput(nkeys*2, inputs, sizeof(INPUT));
< if( uSent != nkeys*2 ) {
---
> UINT uSent = SendInput(j, inputs, sizeof(INPUT));
> if( uSent != j ) {