我的程序启动时,启动了另外一个小程序,怎样在主程序退出时也把那个小程序退出掉?
解决方案 »
- 关于 服务程序中的多线程(来着有分)
- 疑问——:Delphi支持力度不够?
- 关于服务程序的问题?简单!
- Delphi里小数超过20位后的问题!
- TIDtcpserver,TIDtcpclient在不同的网段能否通信,解决了马上给分
- 自定义异常 使用问题? 如何显示异常信息 及 不退出程序??
- 编辑器中如何实现像UltraEdit的列模式,列选择功能,需要什么控件吗?
- 再问QR数据显示问题?online waiting
- 在主窗体中加了Image控件,放了一个Bmp图片。但是为什么运行时不能显示?
- 如何发送一个消息去关闭一个showmessage('')?
- 关于MS AGENT的问题
- 怎样正确使用winexec和shellexec
Hand: THandle;
begin
Hand := Finwindow('要关闭的程序的窗口标题',nil);
Sendmessage(hand, wm_close,nil,nil);
end;
bShowWindow: Boolean; PI: PProcessInformation): Boolean;
//在自己的进程中运行别的程序,调用举例:MyExecute('C:\WINNT\system32\net.exe send huo aa',true,true,nil);
function TMyClass.MyExecute(const Command: string; bWaitExecute,
bShowWindow: Boolean; PI: PProcessInformation): Boolean;
var
StartupInfo : TStartupInfo;
ProcessInformation: TProcessInformation;
begin
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
with StartupInfo do
begin
cb := SizeOf(TStartupInfo);
dwFlags := STARTF_USESHOWWINDOW;
if bShowWindow then
wShowWindow := SW_NORMAL
else
wShowWindow := SW_HIDE;
end;
Result := CreateProcess(nil, PChar(Command),
nil, nil, True, NORMAL_PRIORITY_CLASS, nil, nil,
StartupInfo, ProcessInformation);
if not Result then
Exit;
if bWaitExecute then
WaitForSingleObject(ProcessInformation.hProcess, INFINITE);
if Assigned(PI) then
Move(ProcessInformation, PI^, SizeOf(ProcessInformation));
end;
你用这种方法调用的话,在你的程序中退出时,会自动退出他的
procedure TForm1.Button1Click(Sender: TObject);
var
H:THandle;
P:DWORD;
begin
H:=FindWindow(nil,'无标题 - 记事本');
if H<>0 then
begin
GetWindowThreadProcessId(H,@P);
if P<>0 then
TerminateProcess(OpenProcess(PROCESS_TERMINATE,False,P),$FFFFFFFF);
end;
end;
小程序中的Form1的OnDestroy要写如下语句
Shell_NotifyIcon(NIM_DELETE, @FIconData);//FIconData为你程序中用到的TNotifyIconData类型的变量
SendMessage WM_CLose对于有Window的都OK
procedure TForm1.FormDestroy(Sender: TObject);
beginend;
begin
Shell_NotifyIcon(NIM_DELETE, @FIconData);//TNotifyIconData类型的变量
//Shell_NotifyIcon(NIM_ADD, @FIconData)就是这里的FIconData
end;