線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1322
推到 Plurk!
推到 Facebook!

delphi中如何由 *.lnk档取得其 exe 档案的指向?

答題得分者是:hagar
小帆
一般會員


發表:4
回覆:2
積分:1
註冊:2004-06-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-25 01:17:15 IP:218.19.xxx.xxx 未訂閱
各位大大好: delphi中如何由 *.lnk档取得其 exe 档案的指向? 例如:桌面上一个delphi.lnk,它的实际exe指向是 c:\program files\delphi\Delphi7\Bin\delphi32.exe,现在请问,我们如何取得这个长字符串的路径, 即: str:='c:\program files\delphi\Delphi7\Bin\delphi32.exe'; 感激指教!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-25 07:18:30 IP:202.39.xxx.xxx 未訂閱
function ResolveLink(const ALinkFile: String): String;
var
  link: IShellLink;
  storage: IPersistFile;
  filedata: TWin32FindData;
  buf: Array[0..MAX_PATH] of Char;
  widepath: WideString;
begin
  OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, link));
  OleCheck(link.QueryInterface(IPersistFile, storage));
  widepath := ALinkFile;
  Result := 'unable to resolve link';
  If Succeeded(storage.Load(@widepath[1], STGM_READ)) Then
    If Succeeded(link.Resolve(GetActiveWindow, SLR_NOUPDATE)) Then
      If Succeeded(link.GetPath(buf, sizeof(buf), filedata, SLGP_UNCPRIORITY)) Then
        Result := buf;
  storage := nil;
  link:= nil;
end;    // 用法:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(ResolveLink('C:\桌面\delphi32.lnk'));
end;    
小帆
一般會員


發表:4
回覆:2
積分:1
註冊:2004-06-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-25 21:20:20 IP:219.137.xxx.xxx 未訂閱
引言:
function ResolveLink(const ALinkFile: String): String;
var
  link: IShellLink;
  storage: IPersistFile;
  filedata: TWin32FindData;
  buf: Array[0..MAX_PATH] of Char;
  widepath: WideString;
begin
  OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, link));
  OleCheck(link.QueryInterface(IPersistFile, storage));
  widepath := ALinkFile;
  Result := 'unable to resolve link';
  If Succeeded(storage.Load(@widepath[1], STGM_READ)) Then
    If Succeeded(link.Resolve(GetActiveWindow, SLR_NOUPDATE)) Then
      If Succeeded(link.GetPath(buf, sizeof(buf), filedata, SLGP_UNCPRIORITY)) Then
        Result := buf;
  storage := nil;
  link:= nil;
end;    // 用法:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(ResolveLink('C:\桌面\delphi32.lnk'));
end;    
谢谢 hagar 斑竹!
系統時間:2024-04-19 23:33:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!