模拟键盘输入 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

 

posted @ 2022-04-07 11:16  ckrgd  阅读(365)  评论(0编辑  收藏  举报