掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CreateProcessの処理対象 (ID:12026)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
http://www.informit.com/articles/article.asp?p=26940&seqNum=4 http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=2#0273.txt 上記の内容を参考にして Dephi6 でショートカットファイルから情報を得る 関数を試しました。うまくいくようです。 uses ActiveX, ShlObj, ComObj; type TShellLinkInfo = record PathName: string; Arguments: string; Description: string; WorkingDirectory: string; IconLocation: string; IconIndex: integer; ShowCmd: integer; HotKey: word; end; procedure GetShellLinkInfo(const LinkFile: WideString; var SLI: TShellLinkInfo); var SL: IShellLink; PF: IPersistFile; FindData: TWin32FindData; AStr: array[0..MAX_PATH] of char; begin OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, SL)); PF := SL as IPersistFile; OleCheck(PF.Load(PWideChar(LinkFile), STGM_READ)); OleCheck(SL.Resolve(0, SLR_ANY_MATCH or SLR_NO_UI)); with SLI do begin OleCheck(SL.GetPath(AStr, MAX_PATH, FindData, SLGP_SHORTPATH)); PathName := AStr; OleCheck(SL.GetArguments(AStr, MAX_PATH)); Arguments := AStr; OleCheck(SL.GetDescription(AStr, MAX_PATH)); Description := AStr; OleCheck(SL.GetWorkingDirectory(AStr, MAX_PATH)); WorkingDirectory := AStr; OleCheck(SL.GetIconLocation(AStr, MAX_PATH, IconIndex)); IconLocation := AStr; OleCheck(SL.GetShowCmd(ShowCmd)); OleCheck(SL.GetHotKey(HotKey)); end; end; function ShortToLongFileName(const ShortName: string): string; var Desktop: IShellFolder; pIDList: PITEMIDLIST; NameS: String; NameW: WideString; Len : integer; Buffer: array[0..MAX_PATH] of Char; pDummy: PCHAR; pchEaten, Attributes: ULONG; begin pIDList := Nil; Len := GetFullPathName(PChar(ShortName), 0, PChar(result), pDummy); SetLength(NameS, Len); GetFullPathName(PChar(ShortName), Len, PChar(NameS), pDummy); NameW := NameS; OleCheck(SHGetDesktopFolder(Desktop)); OleCheck(Desktop.ParseDisplayName(0, Nil, PWideChar(NameW), pchEaten, pIDList, Attributes)); if not SHGetPathFromIDList(pIDList, Buffer) then raise EConvertError.Create('ファイルを変換できません。'); Result := StrPas(Buffer); end; procedure TForm1.Button1Click(Sender: TObject); var sli:TShellLinkInfo; begin GetShellLinkInfo('C:\Adobe Reader 6.0.lnk', sli); Label1.Caption := sli.PathName; Label2.Caption := ShortToLongFileName(sli.PathName); end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.