如何控制另一个exe文件的运行? ( 积分: 300 )

  • 主题发起人 主题发起人 eastweast
  • 开始时间 开始时间
E

eastweast

Unregistered / Unconfirmed
GUEST, unregistred user!
描述:目前有一门禁软件,主要实现如下功能。1:可以手动将卡的信息(从数据库中读取)下载到门禁控制器中;2:可以实时的从控制器中回传刷卡及开门信息。<br>以上两个功能都是用两个模态窗口实现的。程序是SDI的,其中窗体都是模态的。<br>问题:由于程序没有源代码,想实现定时下载卡信息的功能。因此想写一个程序来控制它的程序,到了预定时间就自动把窗口2关闭,然后把窗口1&nbsp;show出来(手动时通过菜单),然后模拟按下下载按钮,待弹出完成后关闭窗口1,然后再show出窗口2,至此,就算完成。<br>请教各位,是否可以实现?是否有更简单的方法?
 
不好意思,我只有VC代码<br>//&nbsp;发消息强行退出<br> CWnd*&nbsp;h;<br> h=FindWindow(NULL,&nbsp;&quot;金山词霸&nbsp;2002&quot;);<br> ::PostMessage(*h,&nbsp;WM_QUIT,&nbsp;NULL,&nbsp;NULL);<br> SendMessage(hwnd,&nbsp;WM_DESTROY,&nbsp;0,&nbsp;0);&nbsp;//&nbsp; HWND&nbsp;hwnd;<br><br>show出来也很简单,一个API就可以的:<br>//&nbsp;FindWindow的用法<br> CWnd*&nbsp;h;<br> h=FindWindow(NULL,&nbsp;&quot;金山词霸&nbsp;2002&quot;);<br> ::ShowWindow(*h,SW_SHOWNORMAL);<br><br>模拟按键也有专门的API:<br> keybd_event(144,&nbsp;MapVirtualKey(144,&nbsp;0&nbsp;),&nbsp;KEYEVENTF_KEYUP&nbsp;,&nbsp;0&nbsp;);<br><br>其实网上很有很多很多这样的例子,自己随便找一个看,就什么都有了。
 
请教一下在ShowWindow之前要findwindow找到窗口句柄,如果此时窗口是close的而不是失去焦点应该不能show的吧,要发送模拟按键或者鼠标消息的吧?<br><br>再请教一下,如果窗口没有获得焦点,是否可以发送按键消息?
 
网上应该有很多相关资料!<br><br>用消息实现你要的功能!
 
如果是close的当然无法找到。没有可执行文件路径你没法启动这个外部exe,要不然就违反windows基本规了。在这种情况下要发送模拟按键或者鼠标消息是没有用的,向谁发送?
 
去看雪学院看看.<br>&nbsp;&nbsp;你可以写一个DLL注入原程序,在DLL中设置个定时器,用定时器来控制它.
 
很容易,自己createprocess的程序想怎么做都可以了。
 
createprocess&nbsp;只能够运行程序和结束程序,如果要控制程序执行,还是要MESSAGE,或者DLL注入也可以。
 
createproces&nbsp;带上&nbsp;debug&nbsp;权限,想做什么都可以.
 
应该不难吧;<br>用delphi的winsight32或其他什么工具看一下该程序的下载按钮按下时触发的消息,以及该按钮的handle,<br>然后你就通过向该按钮发该消息来控制它了.<br>至于show与关闭,正如hehuan所说,找到该程序的handle,然后发相应消息就行了
 
发送系统消息呀
 
根据对系统发的消息...可以搞到...........<br>然后对巨进行控制...
 
多人接受答案了。
 
后退
顶部