在 Delphi 7 中使用 ShellExecuteEx 使用动词打开文件时,我似乎总是在 hInstApp 中返回 42,即使我期望得到失败和 31 结果,因为没有文件关联。我正在从 ShellExecute 转移到 ShellExecuteEx,以便可以将 WaitForInputIdle 与进程句柄一起使用。
当我没有安装 Excel 时尝试打开 XLS 文件时,ShellExecute 按预期返回 31,但 ShellExecuteEx 似乎成功并返回 42,即使它实际上已失败并弹出默认的 Windows 文件关联对话框。
难道我做错了什么?在 WinXP 和 Win7 上使用 Delphi 7。
下面的示例代码。在 Win XP 32 位操作系统上使用 Delphi 7,但在 Win 7 64 位上也得到相同的结果。只是在 hInstApp 值上显示消息返回 42,而我希望得到 31,因为我没有安装 Excel。
var
ExecInfo: TShellExecuteInfo;
begin
ZeroMemory(ExecInfo, sizeof(ExecInfo));
with ExecInfo do
begin
cbSize := sizeOf(ExecInfo);
fMask := SEE_MASK_NOCLOSEPROCESS;
lpVerb := PChar('open');
lpFile := PChar('c:\windows\temp\test.xls');
nShow := 1;
end;
ShellExecuteEx(@ExecInfo);
if ExecInfo.hInstApp<32
then WaitForInputIdle(ExecInfo.hProcess, 10000);
end;