问题描述:
      机器上运行了多个不通的软件,我需要对这些软件进行频繁的切换,来查看各个软件界面的显示情况!同时要模拟人工在这些软件界面上做一些输入。
提问:
      1.如何实现把不同的软件切换到当前窗口?
      2.如何获取当前窗口运行界面上的输入焦点,并且输入预先存好的值到输入框中,并能自动点击确定等按钮!

解决方案 »

  1.   

    BOOL SetForegroundWindow(
      HWND hWnd   // handle to window
    );GetFocus
    FindWindow
    SendMessage
      

  2.   

    渴望详细一点的指导,十分感激ddszhan 
      

  3.   

    这种功能做起来比较麻烦,常用的做法有两种:一种是用SendInput之类的函数模拟键盘、鼠标输入;另一种是用SendMessage发送窗口消息来控制。
    此外,你需要先考虑好如何来控制,是否需要人工参与。
      

  4.   

    to cnzdgs:
       每个软件窗口上要进行那些操作,以及要输入那些参数,这些可以保存在数据库或者脚本文件里面。
        要做的切换程序在把某一软调用到当前窗口时,再从脚本或者库里面获取要进行的操作和输入,模拟人工在当前窗口上完成这些操作和输入,并且讲反馈结果保存下来。这些操作完成之后就切换到下一个软件窗口上去,如此循环。
      

  5.   

    频繁切换是由谁来切换呢?人工还是自动?
    可以由程序把需要切换的程序进行排列同时显示,然后从配置文件或数据库等地方读出要进行的操作(可能需要事先约定好什么内容或什么状态后需要进行什么操作),然后程序不断读出执行。然后就是进程间通信,
    可以通过查找窗口句柄,发消息给该窗口执行操作(但参数只能是简单数据类型),
    也可以通过SOCKET或别的方式交互。
      

  6.   

    1.不是通过人眼看,完全没必要切换到前面来
    2.只要获得对应的窗口句柄,随便SendMessage过去,什么都搞定
      

  7.   

    to:partime
    那也是,直接通过消息过去!
      

  8.   

    将某个应用程序调到前台:
    CWnd *pwnd,*pwndchild;
    if(pwnd=CWnd::FindWindow(NULL,_T("SmsTest")))
    {
    pwndchild=pwnd->GetLastActivePopup();
    if(pwnd->IsIconic())
    pwnd->ShowWindow(SW_RESTORE);
    pwndchild->SetForegroundWindow();
    }
    至于第二个要用SPY++来得到输入框的句柄
      

  9.   

    只要得到该窗口的句柄,SendMessage就可以了吧,然后再SetForegroundWindow用吧它设为有前景窗口,
    或者先设置前景窗口,再用SendMessage输入你可以去看看我的"VC 获取QQ三国游戏句柄"上边有一个还算类似的例子