我找到一个函数GettLnkPath可以获取一个链接文件的目录文件,
但是在处理特殊目录的时候就出现问题了,比如
获取C:\Program Files\我的测试\mytestProgramDir\Project1.exe
返回结果是C:\PROGRA~1\我的~1\mytest~1\Project1.exe
本身两个是相同,有没有办法区分啊
function GettLnkPath(LinkFile: WideString): String;
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));
OleCheck(SL.GetPath(AStr, MAX_PATH, FindData, SLGP_SHORTPATH));
Result := AStr;
end;
但是在处理特殊目录的时候就出现问题了,比如
获取C:\Program Files\我的测试\mytestProgramDir\Project1.exe
返回结果是C:\PROGRA~1\我的~1\mytest~1\Project1.exe
本身两个是相同,有没有办法区分啊
function GettLnkPath(LinkFile: WideString): String;
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));
OleCheck(SL.GetPath(AStr, MAX_PATH, FindData, SLGP_SHORTPATH));
Result := AStr;
end;
可以到我另外一个帖子
http://community.csdn.net/expert/Topicview2.asp?id=4499007
我可以再给给我回复正确的+20分
function ExeFromLink(const linkname: string): string;
var
FDir,
FName,
ExeName: PChar;
z: integer;
begin
ExeName:= StrAlloc(MAX_PATH);
FName:= StrAlloc(MAX_PATH);
FDir:= StrAlloc(MAX_PATH);
StrPCopy(FName, ExtractFileName(linkname));
StrPCopy(FDir, ExtractFilePath(linkname));
z:= FindExecutable(FName, FDir, ExeName);
if z > 32 then
Result:= StrPas(ExeName)
else
Result:= '';
StrDispose(FDir);
StrDispose(FName);
StrDispose(ExeName);
end;
csdn 今天不知道怎么回事,我开一个帖子半个小时都还没有打开
不知道是不是我的系统的问题
...
z:= FindExecutable(FName, FDir, ExeName);
if z > 32 then //这个地方老是为31
Result:= StrPas(ExeName)
else
...
怎么回事啊