- 注册时间
- 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;
- }
复制代码
|
|