【发布时间】:2021-10-07 10:39:21
【问题描述】:
如何运行应用程序被广泛描述,一个很好的来源code by Zarko Gajic 我们使用这样的修改版本,在 Windows 和 VCL 框架下完美运行
var
ExitCode : DWORD;
SEInfo : TShellExecuteInfo;
begin
///
/// Execute shell function from Delphi Code
///
FillChar(SEInfo, SizeOf(SEInfo), 0);
SEInfo.cbSize := SizeOf(TShellExecuteInfo);
WITH SEInfo DO
begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := OurClass.Handle;
lpFile := PWidechar(EXENAMESTR);
lpParameters := PWidechar(ParameterFile);
nShow := SW_SHOWNORMAL;
end;
///
/// Follow up our process
///
if ShellexecuteEx(@SEInfo) then
begin
repeat
GetExitCodeProcess(SEInfo.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) OR Application.Terminated;
end;
问题:我们无法在 FMX 框架应用程序中将此代码编译为 Wnd := OurClass.Handle;失败,句柄没有定义,如何解决这个问题? 最佳解决方案是适用于两种框架 VCL&FMX 的代码。
【问题讨论】:
-
请注意
Wnd是可选的。 -
附带说明,您应该在循环中设置睡眠以避免占用所有 CPU(或者更好的是,使用
WaitForSingleObject())。 -
OurClass到底是什么对象/类型?只有 FMX 表单有Handle,子控件没有。即便如此,Handle也不是 Win32HWND,就像在 VCL 中一样,您可以使用FMX.Platform.Win.FormToHWND()来获取实际的HWND
标签: delphi