2014-01-30 161 views
0

我想創建一個與德爾福的DLL,我設置了一些文件屬性,但然後我想從工作目錄運行.exe文件。 我試圖與此代碼德爾福執行應用

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

運行exe文件,但我得到的錯誤: 未聲明的標識符「句柄」。

未聲明的標識符「SW_SHOWNORMAL」

什麼是運行exe文件的最好方法?

回答

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; 
+0

以及如何在這種情況下使用CreateProcess函數? – Dany

+1

@Dany似乎是一個新問題? –

+0

@Dany我修改了我的答案以包含一個(未經測試的)CreateProcess示例。 –

4

一定要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中的任何其他函數或過程人皆可訪問的定義。

4

你在問題中描述的錯誤是:

未聲明的標識符「句柄」

只有你知道哪些處理通過。如果您的應用程序沒有窗口句柄,請將句柄傳遞給窗體或Application對象的句柄,或者甚至可以使用0

未聲明的識別符 'SW_SHOWNORMAL'

即符號在Windows單元定義。您只需將該設備添加到您的uses列表中即可。