如何执行外部程序[并一直等到它结束] ?(100分)

  • 主题发起人 主题发起人 saving
  • 开始时间 开始时间
S

saving

Unregistered / Unconfirmed
GUEST, unregistred user!
如何执行外部程序[并一直等到它结束] ?
我在网上找到2个程序代码:
var
sCommandLine: string;
bCreateProcess: boolean;
lpStartupInfo: TStartupInfo;
lpProcessInformation: TProcessInformation;
begin
sCommandLine := 'ARJ.EXE /?';
bCreateProcess := CreateProcessA(nil, PChar(sCommandLine),
nil, nil, True, NORMAL_PRIORITY_CLASS, nil, nil,
lpStartupInfo, lpProcessInformation);
if bCreateProcess then
WaitForSingleObject(lpProcessInformation.hProcess, INFINITE);
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;

第一个:编译通过,运行无反应,不能调出其他程序,不管是DOS程序还是win98下的程序。
第二个:GetModuleUsage未定义,编译通不过。
请指教!
 
你那个例子是在windows3.1&Delphi1.0下的,所以有点问题。
 
if findwindow('','')=0 then
winexec();
while findwindow('','')<>0 do
application.processmessage;
end;
 
把这个改一下,就ok了。

var
Form1: TForm1;
ProcessInfo: TProcessInformation; // holds process information

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
StartUpInfo: TStartUpInfo; // holds startup information
begin
{initialize the startup information}
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
with StartupInfo do

begin
cb := SizeOf(TStartupInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := SW_SHOWNORMAL;
end;

{launch a process}
CreateProcess('c:/Windows/calc.exe', nil, nil, nil, False,
NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
ExitCode: DWORD; // holds the process exit code

begin
{terminate the process and retrieve the exit code}
TerminateProcess(ProcessInfo.HProcess, 10);
GetExitCodeProcess(ProcessInfo.HProcess, ExitCode);

{display the exit code}
Label1.Caption := 'The exit code is '+Inttostr(ExitCode);
end;
 
建议saving 先在论坛查找下,这个问题已经讨论n次了
 
多人接受答案了。
 
后退
顶部