- 注册时间
 - 2021-4-16
 
- 最后登录
 - 2024-3-15
 
- 在线时间
 - 3 小时
 
 
 
 
 
编程入门 
  
	- 龙马币
 - 54 
 
 
 
 
 | 
 
 
SendInput比keybd_event要方便多了,可以支持发送中文。 
 
- #include <atlconv.h>   
 
 -   
 
 - #pragma comment(lib,"User32.lib")  
 
 - #pragma comment(lib,"shlwapi.lib")  
 
 -   
 
 - void SendAscii(wchar_t data, BOOL shift)  
 
 - {  
 
 -     INPUT input[2];  
 
 -     memset(input, 0, 2 * sizeof(INPUT));  
 
 -   
 
 -     if (shift)  
 
 -     {  
 
 -         input[0].type = INPUT_KEYBOARD;  
 
 -         input[0].ki.wVk = VK_SHIFT;  
 
 -         SendInput(1, input, sizeof(INPUT));  
 
 -     }  
 
 -   
 
 -     input[0].type = INPUT_KEYBOARD;  
 
 -     input[0].ki.wVk = data;  
 
 -   
 
 -     input[1].type = INPUT_KEYBOARD;  
 
 -     input[1].ki.wVk = data;  
 
 -     input[1].ki.dwFlags = KEYEVENTF_KEYUP;  
 
 -   
 
 -     SendInput(2, input, sizeof(INPUT));  
 
 -   
 
 -     if (shift)  
 
 -     {  
 
 -         input[0].type = INPUT_KEYBOARD;  
 
 -         input[0].ki.wVk = VK_SHIFT;  
 
 -         input[0].ki.dwFlags = KEYEVENTF_KEYUP;  
 
 -         SendInput(1, input, sizeof(INPUT));   
 
 -     }  
 
 - }  
 
 -   
 
 -   
 
 - void SendUnicode(wchar_t data)  
 
 - {  
 
 -     INPUT input[2];  
 
 -     memset(input, 0, 2 * sizeof(INPUT));  
 
 -   
 
 -     input[0].type = INPUT_KEYBOARD;  
 
 -     input[0].ki.wVk = 0;  
 
 -     input[0].ki.wScan = data;  
 
 -     input[0].ki.dwFlags = 0x4;//KEYEVENTF_UNICODE;  
 
 -   
 
 -     input[1].type = INPUT_KEYBOARD;  
 
 -     input[1].ki.wVk = 0;  
 
 -     input[1].ki.wScan = data;  
 
 -     input[1].ki.dwFlags = KEYEVENTF_KEYUP | 0x4;//KEYEVENTF_UNICODE;  
 
 -   
 
 -     SendInput(2, input, sizeof(INPUT));  
 
 - }  
 
 -   
 
 - //为方便使用,下面这个函数包装了前两个函数。  
 
 - void SendKeys(TCHAR *strMsg)  
 
 - {  
 
 -     short vk;  
 
 -     BOOL shift;  
 
 -   
 
 -     USES_CONVERSION;  
 
 -     wchar_t* data = T2W(strMsg);  
 
 -     int len = wcslen(data);  
 
 -   
 
 -     for(int i=0;i<len;i++)  
 
 -     {  
 
 -         if (data[i]>=0 && data[i]<256) //ascii字符  
 
 -         {  
 
 -             vk = VkKeyScanW(data[i]);  
 
 -   
 
 -             if (vk == -1)  
 
 -             {  
 
 -                 SendUnicode(data[i]);  
 
 -             }  
 
 -             else  
 
 -             {  
 
 -                 if (vk < 0)  
 
 -                 {  
 
 -                     vk = ~vk + 0x1;  
 
 -                 }  
 
 -   
 
 -                 shift = vk >> 8 & 0x1;  
 
 -   
 
 -                 if (GetKeyState(VK_CAPITAL) & 0x1)  
 
 -                 {  
 
 -                     if (data[i]>='a' && data[i]<='z' || data[i]>='A' && data[i]<='Z')  
 
 -                     {  
 
 -                         shift = !shift;  
 
 -                     }  
 
 -                 }  
 
 -   
 
 -                 SendAscii(vk & 0xFF, shift);  
 
 -             }  
 
 -         }  
 
 -         else //unicode字符  
 
 -         {  
 
 -             SendUnicode(data[i]);  
 
 -         }  
 
 -     }  
 
 - }  
 
  
- int _tmain(int argc, _TCHAR* argv[])  
 
 - {  
 
 -     Sleep(5000);  
 
 -     SendKeys(L"Sysprogram 测试中文");  
 
 -     return 0;  
 
 - }  
 
 
  复制代码 
 |   
 
 
 
 |