程序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);
}
程序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);
}
先用Spy++跟踪Setup程序每一步安装会出现的窗口的类和标题以及其他的一些特征,然后在程序中也根据前面得到的信息一步一步的等待窗口、模拟点击按钮。但这样做,只能给每个Setup写一个程序。现在也搞不明白为什么会有这样的问题。
先用Spy++跟踪Setup程序每一步安装会出现的窗口的类和标题以及其他的一些特征,然后在程序中也根据前面得到的信息一步一步的等待窗口、模拟点击按钮。但这样做,只能给每个Setup写一个程序。现在也搞不明白为什么会有这样的问题。
==================================================================
完全同意。可能是你的程序阻塞了另外的程序。
使用 CreateProcess 试试。
这个程序以前一直用CreateProcess,不行的才改用WinExec,结果还是不行。我把原来的程序做成了2个程序后就可以了:
第一个程序作前几步,成功后调用第2个程序,并且自己退出。
第二个程序起来后等几秒就可以继续完成操作。我就不清楚,为什么把代码写到一块做成一个程序就不行呢?