Delphi执行应用程序

时间:2014-01-30 16:04:35

标签: delphi delphi-7

我正在尝试使用delphi创建一个dll,我设置了一些文件属性,但后来我想从工作目录运行一个.exe文件。 我试图用这段代码运行exe文件

ShellExecute(Handle, 'open', 'start.exe', nil, nil, SW_SHOWNORMAL);

但我得到错误: 未声明的标识符'Handle'。

未声明的标识符'SW_SHOWNORMAL'

运行exe文件的最佳方法是什么?

3 个答案:

答案 0 :(得分:4)

请务必将ShellApi添加到Unit的使用条款中。

uses ShellApi;

如果程序没有窗口句柄,则第一个参数可以为0.

ShellExecute(0, 'open', ('start.exe'), nil, nil, SW_SHOW);

您的start.exe过程中未定义“Handle”参数

Procedure TForm1.StartEXE;
begin
ShellExecute(0, 'open', ('start.exe'), nil, nil, SW_SHOW);
end;

这将使其可以通过TForm1中的任何其他功能或程序进行普遍访问。

答案 1 :(得分:4)

您在问题中描述的错误是:

  

未声明的标识符'处理'

只有你知道要传递哪个句柄。如果您的应用程序没有可用的窗口句柄,则将句柄传递给表单或Application对象的句柄,或者甚至是0

  

未声明的标识符'SW_SHOWNORMAL'

该符号在Windows单位中定义。您只需将该单元添加到uses列表中即可。

答案 2 :(得分:0)

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;