gpt4 book ai didi

delphi - 如何正确使用 WaitForSingleObject 方法来等待外部程序终止?

转载 作者:行者123 更新时间:2023-12-03 14:42:52 28 4
gpt4 key购买 nike

我正在尝试启动具有提升状态的外部应用程序,并等到它退出后再继续:

var
FProcess: THandle;
ExecInfo: TShellExecuteInfo;
begin

FillChar(ExecInfo, SizeOf(ExecInfo), 0);
with ExecInfo do
begin
cbSize := SizeOf(ExecInfo);
fMask := 0;
Wnd := AWindow;
lpVerb := 'runas';
lpFile := PChar(APath);
lpParameters := PChar(AParams);
lpDirectory := PChar(AWorkDir);
nShow := SW_NORMAL;
end;

Result := ShellExecuteEx(@ExecInfo);

if Wait then
begin
while WaitForSingleObject(ExecInfo.hProcess, INFINITE) <> WAIT_TIMEOUT do
Application.ProcessMessages;
end;

它启动了,但它只是一直等待。即使被调用程序退出后,调用程序也不会继续调用 WaitForSingleObject。

我尝试使用 WAIT_OBJECT_0 而不是 WAIT_TIMEOUT,但我遇到了同样的问题。我在这里做错了什么?

最佳答案

代码是什么

while WaitForSingleObject(ExecInfo.hProcess, INFINITE) <> WAIT_TIMEOUT do
Application.ProcessMessages;

应该做什么?这是一个无限循环。

仅使用

WaitForSingleObject(ExecInfo.hProcess, INFINITE);

相反。是的,你需要

fMask:= SEE_MASK_NOCLOSEPROCESS;

获取进程句柄。

关于delphi - 如何正确使用 WaitForSingleObject 方法来等待外部程序终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5261182/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com