我知道可以使用 Application.Exename 找到当前可执行文件所在的目录。
但是当应用程序使用另一个目录中的快捷方式启动时呢?我可以找到快捷方式所在的那个目录的地址吗,因为我想在那里创建一些文件?
使用XE2。非常感谢。
你可以使用获取启动信息 https://msdn.microsoft.com/en-us/library/windows/desktop/ms683230.aspx与STARTF_TITLEISLINKNAME https://msdn.microsoft.com/en-us/library/windows/desktop/ms686331.aspx#STARTF_TITLEISLINKNAME flag:
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 Seattle 的 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 的名称)文件)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)