私は、現在の実行可能ファイルが置かれているディレクトリは、Application.Exenameを使用して見つけることができます。Delphi:アプリケーションを起動したショートカットはどこですか?
しかし、別のディレクトリのショートカットを使用してアプリケーションを起動したときは、ショートカットがあるディレクトリのアドレスを見つけることはできますか?そこにいくつかのファイルを作成したいのですか?
XE2の使用。どうもありがとう。
私は、現在の実行可能ファイルが置かれているディレクトリは、Application.Exenameを使用して見つけることができます。Delphi:アプリケーションを起動したショートカットはどこですか?
しかし、別のディレクトリのショートカットを使用してアプリケーションを起動したときは、ショートカットがあるディレクトリのアドレスを見つけることはできますか?そこにいくつかのファイルを作成したいのですか?
XE2の使用。どうもありがとう。
あなたはSTARTF_TITLEISLINKNAME
フラグ付きでGetStartupInfoを使用していることを行うことができます。
const
STARTF_TITLEISLINKNAME = $800;
function GetShortcutName(out LinkName: string): Boolean;
var
si: TStartupInfo;
begin
Result := False;
FillChar(si, SizeOf(TStartupInfo), 0);
GetStartupInfo(si);
if (si.dwFlags and STARTF_TITLEISLINKNAME) <> 0 then
begin
Result := True;
LinkName := si.lpTitle;
end;
end;
テストコード(XE8とDelphi 10シアトルでWin7の64でテスト - Win8上でテストまたは10ではない):
program GetShortCutTest;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
Windows;
var
sLink: string;
begin
if GetShortcutName(sLink) then
WriteLn('Shortcut: ' + sLink)
else
WriteLn('Not run from shortcut.');
ReadLn;
end.
テストアプリケーション(「ショートカットから実行しない」と表示されます)を実行し、テストアプリケーションへのショートカットを作成し、そのショートカットを実行することでテストできます( 'ショートカット:'と。 lnkファイル)。
私はこの機能について聞いたことがありません。これは便利なのでしょうか?ショートカットの代わりに、アプリケーションの現在の作業ディレクトリを設定しますか?ショートカットを動かすことができるのはなぜでしょうか?CWDに頼るのはなぜですか?アプリがショートカットではなくコードで起動されるとどうなりますか?または、明示的な「開始」パスを持つショートカットを介して起動しますか?どのパスを使用するかを知ることはもう少し複雑になります。 'STARTF_TITLEISLINKNAME'が使用されている場合は、' IShellLink'を使ってショートカットを読み込み、 'GetWorkingDirectory()'メソッドをチェックし、設定されていなければショートカットのパスにフォールバックすることができます。 –
@Remy:リンクされたMSDNページに記載されています。スタートアップ情報を照会することで、アプリケーションがショートカットから起動しているかどうかを判断することができます。私はそれを自分で使ったことはありませんでしたが、MSはそれを利用可能にします。それはかなりの間文書化されていませんでしたが、デイヴィッドは今削除されたコメントでそれが今だと指摘しました。 –
はい、私はドキュメントを読んでいます。私は、今日(以前は手動で 'GetStartupInfo() 'を手動で使用していた)以前にそのフラグを聞いたことがないと言っていました。しかし実際には、リンクファイル自体へのパスを使用することは今まで役に立ちましたか?確かに、マイクロソフトはそれを利用可能にしていますが、他のソリューションが利用可能なときに実際に使用する必要がありますか?ただ言って。さらにコメントする必要はありません。 –
私はあなたがコマンドライン引数で情報を渡す方が良いと思います。それ以外の場合は、ユーザにショートカットでアプリを起動させる必要がありますが、これは不必要な制限です。私はあなたが提案したことをするアプリを見つけたことはありません。私はそれが警告サインでなければならないと思う。あなたはそのようなアプリを見たことがありますか?なぜ標準的な場所の1つにデータを保存しないのですか? –
@David Heffernan: "C:\ myprogram.exe" "C:\ thisdir \"のように、ディレクトリ名をパラメータ1としてターゲットに完全に渡していれば、ありがとうございます。パラメータ1に "%CD%"のようなものを与える? - 私は多くの変種を試しましたが、実際のディレクトリ名で%CD%を置き換えることはできません。 – Giomach
それは動作しません。ディレクトリをハードコードします。なぜあなたはこのように穀物に逆らっていますか?あなたの目標は何ですか? –