SendInput代替了keybd_event
生活随笔
收集整理的這篇文章主要介紹了
SendInput代替了keybd_event
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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; }總結
以上是生活随笔為你收集整理的SendInput代替了keybd_event的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS挂载U盘
- 下一篇: CentOS上使用OpenStack的一