如何判断一个程序在运行当中 如何判断一个程序在运行当中:我在主程序中启动了一个辅助的程序,我想当我的主程序关闭之后辅程序也关闭。请问怎么办? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果只是简单方法:下面给出一段在 Delphi 中关闭“计算器”程序为例:...var HWndCalculator : HWnd;begin // find the exist calculator window HWndCalculator := Winprocs.FindWindow(nil, '计算器'); // close the exist Calculator } if HWndCalculator <> 0 then SendMessage(HWndCalculator, WM_CLOSE, 0, 0);end;下面是复杂的调用var pWindowsList: pointer; hActiveWindow: HWnd; hExeHandle: THandle;begin pWindowsList := DisableTaskWindows(0); hActiveWindow := GetActiveWindow; try hExeHandle := WinExec('arj.exe /?',SW_SHOWNORMAL); while GetModuleUsage(hExeHandle) <> 0 do Application.ProcessMessages; finally EnableTaskWindows(pWindowsList); SetActiveWindow(hActiveWindow); end;end;// 相信你明白了。题外话:如果执行的是 MSDOS 外部程序,如何能让它的窗口不显示出来呢? [ 接上例 ]:TStartupInfo 这个结构中有一个 sShowWindow 栏位, 将之设为 SW_HIDE即可,同时, dwFlags 标志中至少需含有 STARTF_USESHOWWINDOW, 否则CreateProcess时, sShowWindow 栏位的设定会无效, 以下是修改过的程式:var sCommandLine: string; bCreateProcess: boolean; lpStartupInfo: TStartupInfo; lpProcessInformation: TProcessInformation;begin // sCommandLine 的内容请视您的情况修改 sCommandLine :='Xcopy d:\temp\temp1\*.* d:\temp\temp2 /v/y'; lpStartupInfo.dwFlags := STARTF_USESHOWWINDOW; lpStartupInfo.wShowWindow := SW_HIDE; bCreateProcess := CreateProcess(nil, PChar(sCommandLine),nil,nil,True, HIGH_PRIORITY_CLASS, nil, nil,lpStartupInfo, lpProcessInformation); if bCreateProcess then WaitForSingleObject(lpProcessInformation.hProcess, INFINITE);end;// 又有进步了 ExecSQL 如果判断执行成功? 救命啊!高手指点啊!错误:当前提供程序不支持从单一执行返回多个记录集! listview的问题 在局域网中,直到对方的ip地址,发送一个信息,适时接受并能弹出一个消息提示 求救ADOQUERY假删除的方法? 火急---替换字符串的函数 从数据库中提出文件装入图形中老出错,各位大哥帮我看看程序 特菜的问题:怎么样改变dbgrid里面行的高度,,,,,第一个满分20 菜问题:image的大小为什么不能随意改变? 关于数据库???? 关于透明窗体 谁有使用 TWebBrowser、TPageControl、TTabSheet 写多页浏览器的源代码?
下面给出一段在 Delphi 中关闭“计算器”程序为例:
...
var
HWndCalculator : HWnd;
begin
// find the exist calculator window
HWndCalculator := Winprocs.FindWindow(nil, '计算器'); // close the exist Calculator }
if HWndCalculator <> 0 then
SendMessage(HWndCalculator, WM_CLOSE, 0, 0);
end;下面是复杂的调用var
pWindowsList: pointer;
hActiveWindow: HWnd;
hExeHandle: THandle;
begin
pWindowsList := DisableTaskWindows(0);
hActiveWindow := GetActiveWindow;
try
hExeHandle := WinExec('arj.exe /?',SW_SHOWNORMAL);
while GetModuleUsage(hExeHandle) <> 0 do
Application.ProcessMessages;
finally
EnableTaskWindows(pWindowsList);
SetActiveWindow(hActiveWindow);
end;
end;
// 相信你明白了。
题外话:如果执行的是 MSDOS 外部程序,如何能让它的窗口不显示出来呢? [ 接上例 ]:
TStartupInfo 这个结构中有一个 sShowWindow 栏位, 将之设为 SW_HIDE即可,
同时, dwFlags 标志中至少需含有 STARTF_USESHOWWINDOW, 否则CreateProcess
时, sShowWindow 栏位的设定会无效, 以下是修改过的程式:var
sCommandLine: string;
bCreateProcess: boolean;
lpStartupInfo: TStartupInfo;
lpProcessInformation: TProcessInformation;
begin
// sCommandLine 的内容请视您的情况修改
sCommandLine :='Xcopy d:\temp\temp1\*.* d:\temp\temp2 /v/y';
lpStartupInfo.dwFlags := STARTF_USESHOWWINDOW;
lpStartupInfo.wShowWindow := SW_HIDE;
bCreateProcess := CreateProcess(nil, PChar(sCommandLine),nil,nil,True,
HIGH_PRIORITY_CLASS, nil, nil,lpStartupInfo, lpProcessInformation);
if bCreateProcess then
WaitForSingleObject(lpProcessInformation.hProcess, INFINITE);
end;
// 又有进步了