获取快捷键目录文件的问题

Sorder 2006-01-09 02:59:58
我找到一个函数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;
...全文
94 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
corruption 2006-01-16
  • 打赏
  • 举报
回复
试了安吉儿的方法,发现确实有问题哦
我帮忙看看
Sorder 2006-01-09
  • 打赏
  • 举报
回复
这个函数我是从FAQ上得到的
Sorder 2006-01-09
  • 打赏
  • 举报
回复
to constantine(飘遥的安吉儿)
...
z:= FindExecutable(FName, FDir, ExeName);
if z > 32 then //这个地方老是为31
Result:= StrPas(ExeName)
else
...
怎么回事啊
constantine 2006-01-09
  • 打赏
  • 举报
回复
另外你的代码我这里可以编译,但是运行通不过
csdn 今天不知道怎么回事,我开一个帖子半个小时都还没有打开
不知道是不是我的系统的问题
constantine 2006-01-09
  • 打赏
  • 举报
回复
给你另一个函数
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;
Sorder 2006-01-09
  • 打赏
  • 举报
回复
楼上的,我说的意思是谁帮我解决了,我可以在另外一个帖子再给20分啊
ccrun.com 2006-01-09
  • 打赏
  • 举报
回复
这么快就解决了?恭喜。
Sorder 2006-01-09
  • 打赏
  • 举报
回复
这个问题解决了,
可以到我另外一个帖子
http://community.csdn.net/expert/Topicview2.asp?id=4499007
我可以再给给我回复正确的+20分

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧