像联合证券行情查看这类软件,在主界面,接受键盘输入,只要在主界面输入股票代码就可切换,可我用如下代码就是不成功,不知出了什么问题,请高手指点。
像别的Edit窗口,我这代码会成功的。 CWnd *pWnd = NULL;
pWnd = FindWindow("TdxW_MainFrame_Class",0);
if(pWnd == NULL)
   return;
pWnd->SetWindowPos(this,-1,-1,0,0,SWP_NOSIZE||SWP_NOMOVE);
pWnd->SetActiveWindow();
char cKey;
char cBuf[7] = "600001";
for(int i=0;i<6;i++)
{
cKey = cBuf[i];
pWnd->SendMessage(WM_CHAR, (WPARAM)cKey, 0);
Sleep(100);
}

解决方案 »

  1.   

    你可以试一下WM_KEYDOWN WM_KEYUP事件
      

  2.   

    窗口句柄正确的
    不过我现在发现这是个MDI程序
    我现获得的只是主窗口的句柄,不知是不是就可以了?
      

  3.   

    窗口句柄正确的
    不过我现在发现这是个MDI程序
    我现获得的只是主窗口的句柄,不知是不是就可以了?
    //////////////////////////////////////////////////
    不可以,要找到接收输入的窗口句柄。
      

  4.   

    很有可能, 它可以在主窗口过滤WM_SETFOCUS或WM_KEYDOWN来进行这些“暗箱操作”你在你的程序里先把它SetForegroundWindow,然后再SendMessage试试
      

  5.   

    也没有用,我试过了。
    现在MDI的一个活动子窗口,Text="`",Class="Afx:400000:300b",我用FindWindowEx就是找不到它,我想把它作为输入窗口试试,不知有没办法获取MDI下子窗口的句柄,谢谢兄弟们了
      

  6.   

    用 EnumChildWindows()试试;
    在回调函数中,用::GetWindowInfo(HWND);获得窗口信息,
    再判断如果窗口注册类为EDIT,就发送消息。
      

  7.   

    哎,还是没有用,我向所有的窗口多发消息了也没用
    BOOL CALLBACK EnumChildProc(HWND hwndChild,LPARAM lParam)
    {
    char cKey;
    char cBuf[7] = "600001";
    for(int i=0;i<6;i++)
    {
    cKey = cBuf[i];
    SendMessage(hwndChild,WM_CHAR, (WPARAM)cKey,0);
    }
    return TRUE;
    }
      

  8.   

    程序本身应该是区分不了这两者的
    可能是你发送消息的方式不对,或者它真的在主窗口的激活那里做了什么手脚SetForegroundWindows后,用SendInput试试
      

  9.   

    兄弟们解决了,原来它的程序接收键盘直接调用了DirectInput,没有走window消息函数,所有键盘模拟就失效了
    我现找了个驱动改改,就成功了,谢谢各位,呵