模拟键盘输入 keybd_event()
找到需要的窗口,显示这个窗口到最顶层,把焦点给这个窗口,模拟键盘消息输入,隐藏这个窗口
附上虚拟键码值的网页 Virtual-Key 代码
以防累死也找不到某个符号的虚拟键值是多少,列一个函数
int a = VkKeyScan('A');
作用是得到一个字符的虚拟键值
//找新的窗口 CString strWindowTitle; strWindowTitle.Format(_T("xxxx"));
HWND hCmdWnd; hCmdWnd = ::FindWindow(NULL, strWindowTitle); if (hCmdWnd == NULL) { AfxMessageBox(_T("can't fine window")); return; }
//默认的显示窗口 ::ShowWindow(hCmdWnd, SW_NORMAL); //前端显示 ::SetForegroundWindow(hCmdWnd); //窗口置顶 ::SetWindowPos(hCmdWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); Sleep(100); //键盘输入 CString strCmd = _T("dsfsddsfderft"); SendCmdKeyMessage(strCmd);
void SendCmdKeyMessage(CString sMsg) { char cOldChar = 0; char cSendChar; for (int i = 0; i < sMsg.GetLength(); i++) { if (sMsg[i] == cOldChar) { Sleep(50); } if (sMsg[i] == '.') { keybd_event(110, 0, 0, 0); Sleep(10); } else if (sMsg[i] == '[') { keybd_event(219, 0, 0, 0); Sleep(10); } else if (sMsg[i] == ']') { keybd_event(221, 0, 0, 0); Sleep(10); } else if (sMsg[i] == '\\') { keybd_event(VK_OEM_5, 0, 0, 0); Sleep(10); } else if (sMsg[i] == ':') { keybd_event(16, 0x2A, 0, 0);//shift按下 keybd_event(VK_OEM_1, 0, 0, 0); keybd_event(16, 0x2A, KEYEVENTF_KEYUP, 0);//shift抬起 Sleep(10); } else if (sMsg[i] == '_') { keybd_event(16, 0x2A, 0, 0);//shift按下 keybd_event(VK_OEM_MINUS, 0, 0, 0); keybd_event(16, 0x2A, KEYEVENTF_KEYUP, 0);//shift抬起 Sleep(10); } else if (sMsg[i] == '-') { keybd_event(VK_OEM_MINUS, 0, 0, 0); Sleep(10); } else if (sMsg[i] >= 'a' && sMsg[i] <= 'z') { cSendChar = sMsg[i] - 'a' + 65; keybd_event(cSendChar, 0, 0, 0); Sleep(10); } else if ((sMsg[i] >= 'A' && sMsg[i] <= 'Z')) { keybd_event(20, 0, 0, 0); keybd_event(20, 0, KEYEVENTF_KEYUP, 0); cSendChar = (BYTE)sMsg[i]; keybd_event(cSendChar, 0, 0, 0); keybd_event(20, 0, 0, 0); keybd_event(20, 0, KEYEVENTF_KEYUP, 0); Sleep(10); } else { cSendChar = (BYTE)sMsg[i]; keybd_event((BYTE)sMsg[i], 0, 0, 0); Sleep(10); } } Sleep(100); keybd_event(VK_RETURN, 0, 0, 0); }
::ShowWindow(hCmdWnd, SW_HIDE);//隐藏窗口
alt+tab
keybd_event(VK_MENU, 0xb8, 0, 0); //Alt Press keybd_event(VK_TAB, 0x8f, 0, 0); // Tab Press keybd_event(VK_TAB, 0x8f, KEYEVENTF_KEYUP, 0); // Tab Release keybd_event(VK_MENU, 0xb8, KEYEVENTF_KEYUP, 0); // Alt Release
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)