首页 > 代码库 > C++模拟键盘消息
C++模拟键盘消息
实现功能:在现有DLL程序中向特定的EXE窗口中发送模拟键盘的消息
使用API根据窗口标题递归查找特定的窗口句柄,之后模拟调用。
注意:keybd_event函数不能在VS下使用,所以用SendInput代替使用:
1 int SelfFindWindows(HWND hMainWnd, char* lpName, BYTE keyvalue) 2 { 3 HWND hChildWnd = GetWindow(hMainWnd, GW_CHILD); 4 5 while (hChildWnd != NULL) 6 { 7 char lpChildString[32] ={0}; 8 GetWindowText(hChildWnd, lpChildString, sizeof(lpChildString)); 9 10 if (strstr(lpChildString, lpName)) 11 { 12 SetForegroundWindow(hChildWnd); 13 SetFocus(hChildWnd); 14 15 /*16 keybd_event(keyvalue, 0, 0, 0); 17 keybd_event(keyvalue, 0, KEYEVENTF_KEYUP, 0); 18 */19 INPUT input[2];20 memset(input, 0, sizeof(input));21 //按下 向下方向键22 input[0].ki.wVk = keyvalue;23 input[0].type = INPUT_KEYBOARD; 24 //松开 向下方向键25 input[1].ki.wVk = keyvalue;26 input[1].type = INPUT_KEYBOARD;27 input[1].ki.dwFlags = KEYEVENTF_KEYUP;28 //该函数合成键盘事件和鼠标事件,用来模拟鼠标或者键盘操作。事件将被插入在鼠标或者键盘处理队列里面29 SendInput(2, input, sizeof(INPUT)); 30 return 1; 31 } 32 33 if (GetWindow(hChildWnd, GW_CHILD)) 34 { 35 if (SelfFindWindows(hChildWnd, lpName, keyvalue)) 36 { 37 return 1; 38 } 39 } 40 else 41 hChildWnd = GetWindow(hChildWnd, GW_HWNDNEXT); 42 } 43 44 return 0; 45 } 46 47 int SendKeyEventToEXE() 48 { 49 HWND hDesk = GetDesktopWindow(); 50 HWND hWnd = GetWindow(hDesk, GW_CHILD); 51 52 while (hWnd != NULL) 53 { 54 char lpString[32] ={0}; 55 GetWindowText(hWnd, lpString, sizeof(lpString)); 56 57 if (strstr(lpString, "Foxit Reader")) 58 { 59 SelfFindWindows(hWnd, "Reader", VK_NEXT); 60 61 return 1; 62 } 63 64 hWnd = GetWindow(hWnd, GW_HWNDNEXT); 65 } 66 return 0; 67 }
附录:
虚拟键码VK值大全(Virtual-Key_Codes):
http://wenku.baidu.com/link?url=cH9r3Ycv2dGlYWjds56q4W-UsDCUgdvrJD3RuW9LZ3812jHqxnyXEZhW4aiAHbZLAxGa-UUgvbh_m3pHeGO5slLDjHHlUZJPF4VXX5x4-fm
C++模拟键盘消息
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。