mfc上做了对话框,按钮里的代码如下:
void CKeyDlg::OnButton5() 
{
HWND hwnd=::FindWindow(NULL,"1.txt - 记事本");
Sleep(1111);
::SendMessage( hwnd, WM_KEYDOWN,VK_CONTROL,0); //ctrl
Sleep(555);
::SendMessage( hwnd, WM_KEYDOWN,0x4f,0); // 字母 O
}
获取 一个已经打开的记事本的handle,然后摁下 ctrl 键后再摁 O ,但是记事本毫无反应,无法实现敲击键盘ctrl + O 的效果。但是同样代码,获取一个游戏的handle,然后摁下O键,就会有反应,比如摁下O键就打开了一个窗口。
为什么游戏窗口跟1.txt - 记事本会有不同呢?那该怎样模拟键盘控制 1.txt - 记事本 呢?

解决方案 »

  1.   

    你可以用 keybd_event, 就不会那么辛苦了。
      

  2.   

    FindWindow函数的第一个参数是类名
      

  3.   

    如果你希望ctrl + O 同时按下的话,上面的代码还不够
      

  4.   

    keybd—event行是行,但是不能针对于指定的窗口啊,只能是当前窗口有效啊……
      

  5.   

    void CKeyDlg::OnButton5() 
    {
    HWND hwnd=::FindWindow(NULL,"1.txt - 记事本");
    hwnd=::GetWindow(hwnd,GW_CHILD);::PostMessage( hwnd, WM_KEYDOWN,VK_CONTROL,0); //ctrl
    Sleep(555);
    ::PostMessage( hwnd, WM_KEYDOWN,0x4f,0); // 字母 O
    }
      

  6.   

    你这样获取的只是主窗口,实际上还有子窗口,比如Edit....
      

  7.   

    void CKeyDlg::OnButton5()  
    {
    HWND hwnd=::FindWindow(NULL,"1.txt - 记事本");
    hwnd=::GetWindow(hwnd,GW_CHILD);::PostMessage( hwnd, WM_KEYDOWN,VK_CONTROL,0); //ctrl
    Sleep(555);
    ::PostMessage( hwnd, WM_KEYDOWN,0x4f,0); // 字母 O
    }