我想创建一个与德尔福的DLL,我设置了一些文件属性,但然后我想从工作目录运行.exe文件。 我试图与此代码德尔福执行应用
ShellExecute(Handle, 'open', 'start.exe', nil, nil, SW_SHOWNORMAL);
运行exe文件,但我得到的错误: 未声明的标识符“句柄”。
未声明的标识符“SW_SHOWNORMAL”
什么是运行exe文件的最好方法?
我想创建一个与德尔福的DLL,我设置了一些文件属性,但然后我想从工作目录运行.exe文件。 我试图与此代码德尔福执行应用
ShellExecute(Handle, 'open', 'start.exe', nil, nil, SW_SHOWNORMAL);
运行exe文件,但我得到的错误: 未声明的标识符“句柄”。
未声明的标识符“SW_SHOWNORMAL”
什么是运行exe文件的最好方法?
将Windows
单位添加到您所在单位的实施条款中,并进行调用并编译您的程序。尽管在这种情况下CreateProcess
函数将是更好的选择。事情是这样的(未测试并把我的头顶部): -
Procedure ExecNewProcess(Const ProgramName : String; pWait : Boolean);
Var
lOK : Boolean;
lStartInfo : TStartupInfo;
lProcInfo : TProcessInformation;
Begin
FillChar(lStartInfo, SizeOf(TStartupInfo), #0);
FillChar(lProcInfo, SizeOf(TProcessInformation), #0);
lStartInfo.cb := SizeOf(TStartupInfo);
lOK := CreateProcess(Nil, PChar(ProgramName), Nil, Nil, False,
CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS, Nil, Nil, lStartInfo, lProcInfo);
If lOK Then
Begin
If pWait Then
WaitForSingleObject(lProcInfo.hProcess, INFINITE);
End
Else
ShowMessage('Unable to run ' + ProgramName);
CloseHandle(lProcInfo.hProcess);
CloseHandle(lProcInfo.hThread);
End;
一定要ShellAPI的添加到您单位的使用条款。
uses ShellApi;
如果程序没有窗口句柄,第一个参数可以是0。
ShellExecute(0, 'open', ('start.exe'), nil, nil, SW_SHOW);
“手柄”参数是不是在你的START.EXE程序
Procedure TForm1.StartEXE;
begin
ShellExecute(0, 'open', ('start.exe'), nil, nil, SW_SHOW);
end;
这将使您TForm1中的任何其他函数或过程人皆可访问的定义。
你在问题中描述的错误是:
未声明的标识符“句柄”
只有你知道哪些处理通过。如果您的应用程序没有窗口句柄,请将句柄传递给窗体或Application
对象的句柄,或者甚至可以使用0
。
未声明的识别符 'SW_SHOWNORMAL'
即符号在Windows
单元定义。您只需将该设备添加到您的uses
列表中即可。
以及如何在这种情况下使用CreateProcess函数? – Dany
@Dany似乎是一个新问题? –
@Dany我修改了我的答案以包含一个(未经测试的)CreateProcess示例。 –