程序B是一个安装程序,setup.exe,然后下一步下一步知道完成。
程序A是我写的,目的是为了模仿键盘操作下一步下一步。以前也写过很多这样的程序,都没有问题。但今天遇到程序B就不行了。现象:
模仿点击下一步、下一步,然后出现文件拷贝进度条一直到100%,然后本应出现下一个窗口,
可是程序B死活不动,一直显示100%进度条的那个窗口,除非我把程序A强行退出,下一个窗口才出现。我中间加了sleep也不管用。以前做过n次这种类似程序的经验一点不管用。
我就是不知道什么时候把程序B给锁住了,好像是这种感觉。首先CInstall_DriverDlg::OnInitDialog()里SetTimer(1, 3000, NULL);
然后void CInstall_DriverDlg::OnTimer(UINT nIDEvent)
{
    if(1==nIDEvent)
    {
KillTimer(1);
         WinExec(pSetupName, SW_SHOW);
         然后反复找窗口,模拟点击
    }
    CDialog::OnTimer(nIDEvent);
}

解决方案 »

  1.   

    我以前也写了很多这样的程序,也碰到过楼主这样的问题,很是不解!后来我是用这样的方法:
    先用Spy++跟踪Setup程序每一步安装会出现的窗口的类和标题以及其他的一些特征,然后在程序中也根据前面得到的信息一步一步的等待窗口、模拟点击按钮。但这样做,只能给每个Setup写一个程序。现在也搞不明白为什么会有这样的问题。
      

  2.   

    我以前也写了很多这样的程序,也碰到过楼主这样的问题,很是不解!后来我是用这样的方法:
    先用Spy++跟踪Setup程序每一步安装会出现的窗口的类和标题以及其他的一些特征,然后在程序中也根据前面得到的信息一步一步的等待窗口、模拟点击按钮。但这样做,只能给每个Setup写一个程序。现在也搞不明白为什么会有这样的问题。
    ==================================================================
    完全同意。可能是你的程序阻塞了另外的程序。
    使用 CreateProcess 试试。
      

  3.   

    估计还是要自己用spy++好好的分析一下
      

  4.   

    我是搂主,请大家继续建议:对于spy++看得很清楚,不会错(窗口标题、窗口类、窗口的父窗口...),我每天的工作就是写这种模拟键盘鼠标工作的程序。有很久了,不会出错的。我觉得也是这个原因-------------“可能是你的程序阻塞了另外的程序。”
    这个程序以前一直用CreateProcess,不行的才改用WinExec,结果还是不行。我把原来的程序做成了2个程序后就可以了:
    第一个程序作前几步,成功后调用第2个程序,并且自己退出。
    第二个程序起来后等几秒就可以继续完成操作。我就不清楚,为什么把代码写到一块做成一个程序就不行呢?