我想創建一個與德爾福的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示例。 –