Delphi Tips 
-----------------------------

0273  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/09/24 西坂良幸 rev 1.3
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2006/01/22 <> 編集
短いファイル名を長いファイル名に変換したい(COM版)。

エクスプローラは内部的には、短い名前を使っているようです。
ということは、シェルのCOMインターフェースのメソッドが使えるということです。
[Tips:233]のCOM版を考えてみましょう。

uses ShlObj,Comobj,ActiveX;

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;
  // IShellFolderを生成(解放は自動)
  OleCheck(SHGetDesktopFolder(Desktop));
  // IDリストをえる
  OleCheck(Desktop.ParseDisplayName(0, Nil, PWideChar(NameW), pchEaten, pIDList, Attributes));
  if not SHGetPathFromIDList(pIDList, Buffer) then
  raise EConvertError.Create('ファイルを変換できません。');
  Result := StrPas(Buffer);
end;


WideStringを使うことを覗けば、IShellFolderのParseDisplayNameメソッドとSHGetPathFromIDList
を使うだけです。[Tips:233]よりすっきりしましたか。

※ 使用できるOS、バァージョンに注意して下さい。
参照: [Delphi-ML:7322] <その他Windows関連> <Windows> <ファイル> <PASCAL>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp