```diff *** send_input_1.c 2023-01-09 09:55:51.183344200 +0000 --- send_input_4.c 2023-01-09 10:57:46.678617900 +0000 *************** *** 12,50 **** void SendKeys(const char* keys, size_t nkeys, ModifierKeys modifiers); int main() { ! SendKeys("hello",5,0); } void SendKeys(const char* keys, size_t nkeys, ModifierKeys modifiers) { ! // ignore modifiers for now ! INPUT* inputs = (INPUT*)calloc(nkeys,sizeof(INPUT)); ZeroMemory(inputs,2*nkeys*sizeof(INPUT)); ! for( int i=0; i= 'a' && k <= 'z' ) { ! 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; } else if( k >= 'A' && k <= 'Z' ) { ! 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; } else if( k >= '0' && k <= '9' ) { ! 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; ! } } ! UINT uSent = SendInput(nkeys*2, inputs, sizeof(INPUT)); ! if( uSent != nkeys*2 ) { printf("SendInput failed: 0x%x\n", HRESULT_FROM_WIN32(GetLastError())); } } --- 12,137 ---- void SendKeys(const char* keys, size_t nkeys, ModifierKeys modifiers); int main() { ! char *str = "echo hello worldR"; ! printf("%s %d\n",str,strlen(str)); ! SendKeys(str,strlen(str),0); ! //SendKeys("v",1,kCtrl|kShift); } + // 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 + }; + void SendKeys(const char* keys, size_t nkeys, ModifierKeys modifiers) { ! INPUT* inputs = (INPUT*)calloc(nkeys+8,sizeof(INPUT)); ZeroMemory(inputs,2*nkeys*sizeof(INPUT)); ! 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= 'a' && k <= 'z' ) { ! 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; } else if( k >= 'A' && k <= 'Z' ) { ! 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; ! } } else if( k >= '0' && k <= '9' ) { ! 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++; } ! UINT uSent = SendInput(j, inputs, sizeof(INPUT)); ! if( uSent != j ) { printf("SendInput failed: 0x%x\n", HRESULT_FROM_WIN32(GetLastError())); } } ```