mfc程序,上面有个按钮单击事件是用来模拟在cmd.exe窗口中按下键盘上q键

解决方案 »

  1.   

    SendInput,如果是控制台程序,可以用WriteConsoleInput
      

  2.   

    楼上能不能就WriteConsoleInput按我说的写个示例
      

  3.   

    楼主试试这段代码,我以前用过#include "winable.h"
    …………………………
    INPUT input[2];
    //模拟按下Q键
    ::ZeroMemory(input, sizeof(input));        
    input[0].type = input[1].type = INPUT_KEYBOARD;
    input[0].ki.wVk  = input[1].ki.wVk = 81;//Q键的ASCII码        
    input[1].ki.dwFlags = KEYEVENTF_KEYUP;  // THIS IS IMPORTANT
    ::SendInput(2, input, sizeof(INPUT));
      

  4.   

    楼上我要给dos窗口发送按键信息应该怎么写(不是本对话框窗口啊)
      

  5.   

    你试代码了吗,它是模拟键盘按下,不去管哪个窗口接收,只要控制台窗口有输入焦点就可以收到。执行代码前你可以先用SetFocus把焦点设到控制台窗口处
      

  6.   

    HWND m_hcmd=::FindWindow("ConsoleWindowClass",NULL);
    if (!m_hcmd) return;
    ::SetForegroundWindow(m_hcmd);
    ::SetFocus(m_hcmd);
    ::SendMessage(m_hcmd,WM_SETFOCUS,0,0);
    keybd_event(81,0,0,0);//81是q的虚拟码
      

  7.   

    就我所知道模拟按键可以有以下方式
    方案1:
    keybd_event(key,MapVirtualKey(key,0),0,0);//key值使用按键的虚拟码
    ::Sleep(20);
    keybd_event(key,MapVirtualKey(key,0),KEYEVENTF_KEYUP,0);
    方案2:
    INPUT input;
    ::ZeroMemory(&input, sizeof(input));
    input.type = INPUT_KEYBOARD;
    input.ki.wVk  = key;
    ::SendInput(1, &input, sizeof(INPUT));
    input.ki.dwFlags = KEYEVENTF_KEYUP;  // THIS IS IMPORTANT
    ::SendInput(1, &input, sizeof(INPUT));
    方案3:
    使用SendMessage也可以达到一部分模拟按键的效果,只是不是很好用,而且有些特殊键好像也模拟不了,所以这里就不给出具体的代码了。推荐使用keybd_event模拟。