在win2000下面和xp下面采用如下方式取得快捷方式路径,应用都没有问题,到了win98下面为什么不行啦?各位救命阿,在win98下面取的桌面和开始菜单里面的快捷方式是怎么获取的? //创建桌面文件快捷方式
SHGetSpecialFolderLocation(0, CSIDL_COMMON_DESKTOPDIRECTORY, PIDL);
SHGetPathFromIDList(PIDL, AddDirectory);
//创建开始菜单快捷方式
SHGetSpecialFolderLocation(0, CSIDL_COMMON_programs, PIDL);
SHGetPathFromIDList(PIDL, AddDirectory);
SHGetSpecialFolderLocation(0, CSIDL_COMMON_DESKTOPDIRECTORY, PIDL);
SHGetPathFromIDList(PIDL, AddDirectory);
//创建开始菜单快捷方式
SHGetSpecialFolderLocation(0, CSIDL_COMMON_programs, PIDL);
SHGetPathFromIDList(PIDL, AddDirectory);
解决方案 »
- 下周今天是俺姐姐的生日,提前祝福姐姐生日快乐~~~~~~~~
- 很简单的问题
- 我用Delphi想做关于数据库(Oracle)的Web应用,查了下资料,WebBroker,Websnap,IntraWeb都可以实现,不知用什么好?哪位能详细说明一下
- 初学者求教!
- .dcu是什么文件?有方法查看它的源代码吗?
- 请大家注意:yywxxx同志的行为,以下列出其发言搜索记录
- Delphi6的最新升级包到哪里下载?
- 光顾着学编程,挂了很多科,可能要退学了,前面的路该怎么走阿......
- 谁有Ascii码的对照表?网上有吗?我怎么没有找到!
- 菜鸟问题怎样把 DBgrid的当前记录的底色变成红色而其他记录底色不变?
- 可变记录的问题求教!
- 怎样判断当前程序在不在active以及怎样判断程序最小化了。
用下面的方法
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;
const
CCH_MAXNAME=255;
LNK_RUN_MIN=7;
LNK_RUN_MAX=3;
LNK_RUN_NORMAL=1;type LINK_FILE_INFO=record
FileName:array[0..MAX_PATH] of char;
WorkDirectory:array[0..MAX_PATH] of char;
IconLocation:array[0..MAX_PATH] of char;
IconIndex:integer;
Arguments:array[0..MAX_PATH] of char;
Description:array[0..CCH_MAXNAME] of char;
ItemIDList:PItemIDList;
RelativePath:array[0..255] of char;
ShowState:integer;
HotKey:word;
end;function CreateLinkFile(const info:LINK_FILE_INFO;const DestFileName:string=''):boolean;
var
anobj:IUnknown;
shlink:IShellLink;
pFile:IPersistFile;
wFileName:widestring;
begin
wFileName:=destfilename;
anobj:=CreateComObject(CLSID_SHELLLINK);
shlink:=anobj as IShellLink;
pFile:=anobj as IPersistFile;
shlink.SetPath(info.FileName);
shlink.SetWorkingDirectory(info.WorkDirectory);
shlink.SetDescription(info.Description);
shlink.SetArguments(info.Arguments);
shlink.SetIconLocation(info.IconLocation,info.IconIndex);
// shlink.SetIDList(info.ItemIDList);
shlink.SetHotkey(info.HotKey);
shlink.SetShowCmd(info.ShowState);
shlink.SetRelativePath(info.RelativePath,0);
if DestFileName='' then
wFileName:=ChangeFileExt(info.FileName,'lnk');
result:=succeeded(pFile.Save(pwchar(wFileName),false));
end;
var
tmpObject : IUnknown;
tmpSLink : IShellLink;
tmpPFile : IPersistFile;
PIDL : PItemIDList;
StartupDirectory : array[0..MAX_PATH] of Char;
StartupFilename : String;
LinkFilename : WideString;
begin
StartupFilename := 'C:\Program Files\WinZip\winzip32.exe';
tmpObject := CreateComObject(CLSID_ShellLink);//创建建立快捷方式的外壳扩展
tmpSLink := tmpObject as IShellLink;//取得接口
tmpPFile := tmpObject as IPersistFile;//用来储存*.lnk文件的接口
tmpSLink.SetPath(pChar(StartupFilename));//设定notepad.exe所在路径
tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(StartupFilename)));//设定工作目录
SHGetSpecialFolderLocation(0,
CSIDL_DESKTOPDIRECTORY,
PIDL);//获得桌面的Itemidlist
SHGetPathFromIDList(PIDL,
StartupDirectory);//获得桌面路径
LinkFilename := StartupDirectory + '\MyNotepad.lnk';
tmpPFile.Save(pWChar(LinkFilename),FALSE);//保存*.lnk文件end;
SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, PIDL);//获得桌面的Itemidlist
SHGetPathFromIDList(PIDL, StartupDirectory);//获得桌面路径
这两个语句在win98下面创建不了快捷方式!怎么处理?
//先取Windows系统目录
function TfrmMain.GetWindowsDir(): string;
var
Buf: array[0..MAX_PATH] of Char;
begin
GetWindowsDirectory(Buf, MAX_PATH);
Result := Trim(Buf);
if Result = '' then
Exit;
if Result[Length(Result)] <> '\' then
Result := Result + '\';
end;//再设置快捷方式的路径;procedure TfrmMain.SetLinkPath();
var
PIDL: PItemIDList;
AddDirectory: array[0..MAX_PATH] of Char;
WinVer: TWin32SysType;
sWinDir: string;
begin
WinVer := GetWindowVersion();
sWindir := GetWindowsDir();
if (WinVer = Windows98) then
begin
//创建桌面文件快捷方式
LinkFilenameDestop := sWindir + 'Desktop\' + s_frmMain_ProductName + '.lnk';
//创建开始菜单快捷方式
CreateDirectory(pChar(sWindir + 'Start Menu\Programs\' + s_frmMain_ProductName), nil);
LinkFilenameStartUp := sWindir + 'Start Menu\Programs\' + s_frmMain_ProductName + string('\') + s_frmMain_ProductName + '.lnk';
wsLinkFileNameUninstall := sWindir + 'Start Menu\Programs\' + s_frmMain_ProductName + string('\') + s_UnInstall_ProductName + '.lnk';
lstFiles.Add('dir=' + sWindir + 'Start Menu\Programs\' + s_frmMain_ProductName);
lstFiles.Add('file=' + LinkFilenameDestop);
lstFiles.Add('file=' + LinkFIlenameStartUp);
lstFiles.Add('file=' + wsLinkFileNameUninstall);
end
else
begin
//创建桌面文件快捷方式
SHGetSpecialFolderLocation(0, CSIDL_COMMON_DESKTOPDIRECTORY, PIDL); //取得桌面文件夹;
SHGetPathFromIDList(PIDL, AddDirectory);
LinkFilenameDestop := AddDirectory + string('\') + s_frmMain_ProductName + '.lnk';
//创建开始菜单快捷方式
SHGetSpecialFolderLocation(0, CSIDL_COMMON_programs, PIDL);
SHGetPathFromIDList(PIDL, AddDirectory);
CreateDirectory(pChar(AddDirectory + string('\') + s_frmMain_ProductName), nil);
LinkFilenameStartUp := AddDirectory + string('\') + s_frmMain_ProductName + string('\') + s_frmMain_ProductName + '.lnk';
wsLinkFileNameUninstall := AddDirectory + string('\') + s_frmMain_ProductName + string('\') + s_UnInstall_ProductName + '.lnk';
lstFiles.Add('dir=' + AddDirectory + string('\') + s_frmMain_ProductName);
lstFiles.Add('file=' + LinkFilenameDestop);
lstFiles.Add('file=' + LinkFIlenameStartUp);
lstFiles.Add('file=' + wsLinkFileNameUninstall);
end;
end;