我的程序中ListView的值是用这个函数取得的,如果在繁体或者英文操作系统下,这个函数取得的文件名本身已经是乱码了,所以不管用Tnt控件还是用函数转换,都不行。
我的函数:
function GetDisplayName(ShellFolder: IShellFolder; PIDL: PItemIDList;ForParsing: integer): Widestring;
var
StrRet: TStrRet;
P: PChar;
Flags: Integer;
begin
Result := '';
Case ForParsing of
1: Flags := SHGDN_FORPARSING;
2: Flags := SHGDN_NORMAL;
3: Flags := SHGDN_FORPARSING; //得到全路径
4: Flags := SHGDN_INFOLDER or SHGDN_FORPARSING;//得到带扩展名的名称
end;
ShellFolder.GetDisplayNameOf(PIDL, Flags, StrRet);
case StrRet.uType of
STRRET_CSTR:
SetString(Result, StrRet.cStr, lStrLen(StrRet.cStr));
STRRET_OFFSET:
begin
P := @PIDL.mkid.abID[StrRet.uOffset - SizeOf(PIDL.mkid.cb)];
SetString(Result, P, PIDL.mkid.cb - StrRet.uOffset);
end;
STRRET_WSTR:
Result := StrRet.pOleStr;
end;
end;
不知道有没有别的办法?修改函数?