晚上好!fOpen參數無法正常工作
我目前處於Firemonkey的新應用程序開發的第一階段。這是我第一次使用Firemonkey,但是我有幾年的Delphi經驗。
到目前爲止,我有一個外部應用程序從exe中提取圖標,然後將其作爲BMP保存到文件中。我已經編寫了將參數傳遞給此應用程序的能力(它提供了一個字符串值來告訴它從哪裏提取.exe)。它是在VCL中構建的,因爲我想使用主要用於3D功能的firemonkey框架,但是如果我願意的話,還可以讓我在將來的日期擴展到Mac上。外部應用程序正常工作,所以代碼不需要調整。
我遇到的問題是從我的firemonkey應用程序傳遞參數。我正在使用定製的「fOpen」單元,它允許傳遞參數;
unit fOpen;
interface
uses
{$IFDEF MSWINDOWS}
Winapi.ShellAPI, Winapi.Windows;
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
Posix.Stdlib;
{$ENDIF POSIX}
type
TMisc = class
class procedure Open(sCommand, Params: string);
end;
implementation
class procedure TMisc.Open(sCommand, Params: string);
begin
{$IFDEF MSWINDOWS}
ShellExecute(0, 'OPEN', PChar(sCommand), PChar(Params), '', SW_SHOWNORMAL);
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
_system(PAnsiChar('open ' + AnsiString(sCommand)));
{$ENDIF POSIX}
end;
end.
正如你所看到的,我ISDEF添加了 「PARAMS」 變量的MSWINDOWS。
在我的firemonkey窗體上,有2個按鈕。其中1個執行TOpenDialog,並將選定的文件名輸出到TEdit中。另一個按鈕執行外部應用程序(提取圖標的應用程序),然後將保存的位圖圖像加載到TImageControl中。
這是我正在嘗試使用的代碼;
fOpen.TMisc.Open('HypExIcon.exe', '"' + edit1.Text +'"');
的問題是,第一線,應與參數執行該文件,實際上並沒有像預期的那樣。它甚至不會執行文件(即沒有應用程序啓動的跡象,因爲它應該存在)。但是,如果我將其更改爲這個...
fOpen.TMisc.Open('HypExIcon.exe', 'C:\Windows\Notepad.exe');
...它的功能正如所預料的,在執行外部應用程序並創建包含在參數字段中的圖標。我試過使用PChar('"' + Edit1.text + '"')
以及類似的PWideChar
函數,但他們都沒有解決這個問題。
我相信這是一件非常簡單的事情,我很想念這裏。我很習慣於在VCL中使用PChar
或PWideChar
來處理這些事情,它會把我拋棄。
任何想法?
由於您在Windows上運行並調用ShellExecute,因此Firemonkey在這裏看起來並不相關。對?你把完全合格的路徑放到'Edit1.Text'中嗎?對我來說唯一有意義的是,在Edit1.Text中你沒有完整的文件路徑。我敢打賭,如果你在編輯控件中輸入'C:\ Windows \ Notepad.exe',它就可以工作。 – 2012-02-03 20:16:23
@DavidHeffernan這很奇怪。現在我輸入並繞過「瀏覽」按鈕和TOpenDialog,它工作正常。 – 2012-02-03 20:23:24
當您使用文件對話框瀏覽時,工作目錄會發生變化(除非您禁用該功能)。我認爲。也許這就是發生的事情。您的提取程序對當前目錄敏感嗎?你可以在調用ShellExecute的工作目錄參數中傳遞'ExtractFilePath(Application.ExeName)'。如果你沒有使用文件對話框,這將強制新進程的工作目錄。我認爲。無論如何,答案就在那裏! – 2012-02-03 20:29:40