如何实现这样的功能:在我的程序中调用(启动)一个EXE,如“挖雷”,并且在我的程序结束时也自动结束这个外部EXE?(32分)

  • 主题发起人 主题发起人 ynduanlian
  • 开始时间 开始时间
Y

ynduanlian

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现这样的功能:在我的程序中调用(启动)一个EXE,如“挖雷”,并且在我的程序结束时也自动结束这个外部EXE?
 
打开另一个程序<br>ShellExecute(0, 'open', pchar('路径+文件名'), nil, nil, sw_normal);<br>关闭指定程序<br>var<br>&nbsp;hwnd:Thandle;<br>begin<br>&nbsp;hwnd:=FindWindow(nil,pchar('路径+文件名'));<br>&nbsp;if hwnd&lt;&gt;0 then <br>&nbsp;begin<br>&nbsp; &nbsp; sendMessage(hwnd,WM_SetFocus,0,0);<br>&nbsp; &nbsp; sendMessage(hwnd,wm_close,0,0);<br>&nbsp;end;<br>end;<br>
 
楼上的,不行啊。<br>另外,我要调用的EXE中无窗体标题(Title)的,相当于Delphi中BorderStyle为None的窗体,用FindWindow(Nil,PChar('窗体标题'));不行啊
 
CreateProcess;<br>OpenProcess;<br><br>TerminateProcess;<br>WaitForSingleObject;<br><br>四个api函数,前两个是打开的, 后两个是关闭的, 具体看看win32的帮助
 
自己编一个函数:<br>function KillTask(ExeFileName: string): integer;<br>const<br>&nbsp; &nbsp;PROCESS_TERMINATE=$0001;<br>var<br>&nbsp; ContinueLoop: BOOL;<br>&nbsp; FSnapshotHandle: THandle;<br>&nbsp; FProcessEntry32: TProcessEntry32;<br>begin<br>&nbsp; result := 0;<br>&nbsp; FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);<br>&nbsp; FProcessEntry32.dwSize := Sizeof(FProcessEntry32);<br>&nbsp; ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);<br>&nbsp; while integer(ContinueLoop) &lt;&gt; 0 do begin<br>&nbsp; &nbsp; if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =UpperCase(ExeFileName))<br>&nbsp; &nbsp;or (UpperCase(FProcessEntry32.szExeFile) =UpperCase(ExeFileName))) then<br>&nbsp; &nbsp; &nbsp;Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE,BOOL(0),FProcessEntry32.th32ProcessID),0));<br>&nbsp; &nbsp; &nbsp;ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);<br>&nbsp; end;<br>&nbsp; CloseHandle(FSnapshotHandle);<br>end;<br>100%一定可以关闭。
 
多人接受答案了。
 
后退
顶部