监控程序的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 ljzk
  • 开始时间 开始时间
L

ljzk

Unregistered / Unconfirmed
GUEST, unregistred user!
我有个程序是vc++(sf.exe)开发的,假如sf.exe程序运行时出错是会弹出debug窗口询问是否关闭。
我现在要用delphi做一个监控程序,当sf.exe弹出debug窗口时能被我的delphi监控程序捕获,同时杀掉sf.exe,然后delphi程序能重新启动sf.exe。

当sf.exe弹出debug窗口时怎么样捕获?假如捕获到了又怎么杀掉sf.exe?
杀掉sf.exe后又怎样重新启动sf.exe呢?
请各位大侠给个例子,谢谢!!
 
我有个程序是vc++(sf.exe)开发的,假如sf.exe程序运行时出错是会弹出debug窗口询问是否关闭。
我现在要用delphi做一个监控程序,当sf.exe弹出debug窗口时能被我的delphi监控程序捕获,同时杀掉sf.exe,然后delphi程序能重新启动sf.exe。

当sf.exe弹出debug窗口时怎么样捕获?假如捕获到了又怎么杀掉sf.exe?
杀掉sf.exe后又怎样重新启动sf.exe呢?
请各位大侠给个例子,谢谢!!
 
难道没人懂吗?
 
涉及到了进程之间的通讯了
 
sf.exe弹出debug窗口

程序不是Release的?

也简单,那个对话框有个窗口吧,有个Caption吧
引用单元 shellapi单元
procedure TForm1.Button1Click(Sender: TObject);
var
H : THandle;
begin
H := FindWindow(nil, PChar('窗体标题'));
if H > 0 then begin
SendMessage(H, WM_CLOSE, 0,0);
ShellExecute(Handle, 'open', PChar('绝对路径/sf.exe'), nil, nil, SW_SHOWNORMAL);
end;
end;
把我的这个事件放到Timer里面
 
谢谢,chenybin!!
我按您的思路,基本实现了该功能!!目前正在测试ing...
SendMessage(H, WM_CLOSE, 0,0)好像不行。我是通过FindWindow获取错误窗口的Handle,然后,GetWindowThreadProcessID(...)获取进程id,再kill掉。最后CreateProcess(...)重启sf.exe。
 
应该用SendMessage的方式是可以的,我自己测试过其他的程序,不过有了Handle,处理的办法就多了
 
接受答案!!
 
后退
顶部