Sen STARTF_TITLEISLINKNAME
bayrağıyla GetStartupInfo kullanarak da yapabilirsiniz:
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;
Testi kodu (XE8 ve Delphi 10 Seattle ile Win7 64 üzerinde test - Win8 üzerinde test veya 10 değil):
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.
Test uygulamasını ('Kısayoldan çalışmayan' gösterecek) test uygulamasını çalıştırarak ve ardından test uygulamasına bir kısayol oluşturup bu kısayolu yürüterek test edebilirsiniz (daha sonra 'Kısayol:' ifadesini ve bunun adını gösterir. lnk dosyası).
Bilgiyi komut satırı argümanında iletmekten daha iyi olursun. Aksi halde, kullanıcıları uygulamanızı bir kısayolla başlatmaya zorlarsınız ve bu gereksiz bir sınırlamadır. Teklif ettiğin şeyi yapan bir uygulamaya rastlamadım. Bunun bir uyarı işareti olması gerektiğini düşünüyorum. Böyle bir uygulama gördün mü? Verileri neden standart yerlerden birinde saklamıyorsunuz? –
@David Heffernan: Teşekkürler, şu an çalışıyor, dizin adını tam olarak hedefe parametre 1 olarak ilettiğim gibi: "C: \ myprogram.exe" "C: \ thisdir \" Ama bu mümkün değil parametre 1'i "% CD%" gibi bir şey olarak vermek için? - Çok çeşitli varyantları denedim, ancak% CD% 'yi gerçek dir ismi ile değiştiremedim. – Giomach
Bu işe yaramaz. Sabit kod dizini. Bu şekilde tahıllara neden karşı çıkıyorsunuz? Amacın ne? –