其实是两个问题:
1、如何取得桌面、开始菜单、启动菜单所在的目录?如果是win2000,如何取得当前用户及公共用户的这些目录?
2、如何在任意指定目录下建立快捷方式?
1、如何取得桌面、开始菜单、启动菜单所在的目录?如果是win2000,如何取得当前用户及公共用户的这些目录?
2、如何在任意指定目录下建立快捷方式?
解决方案 »
- 一个数据库连接的问题
- 在delphi中创建数据库时,要怎么样在sql server中的master中判断有没有存在些数据库呢?
- 怎样找游戏的句柄?比如星际争霸,CS之类的
- Form1.frReport1.DesignReport;没响应?
- 刚学delphi,想做个关机程序~~`
- 寻找网络空间!急
- combobox的下拉框内容长度超过本身长度,后面的内容便无法显示,如何解决!
- FTP控件使用中的出错和连接时间长的问题,请大家帮忙?
- 如何把.bmp或其他资源存在编译后的可执行文件中?
- 怎样用DELPHI找到工作,需要学什么?请各位指教
- 如何让一个程序只打开一个窗口?
- 只有dcu文件,没有pas文件的控件怎么安装?
s: string;
begin
SetLength(s, MAX_PATH);
SHGetSpecialFolderPath(Handle, PChar(s), CSIDL_COMMON_DESKTOPDIRECTORY, False);
ShowMessage(Trim(s)); // Trim(s)为所取得的目录
end;
其中第三个参数:
CSIDL_COMMON_DESKTOPDIRECTORY、CSIDL_COMMON_STARTMENU、CSIDL_COMMON_STARTUP
CSIDL_DESKTOPDIRECTORY、CSIDL_STARTMENU、CSIDL_STARTUP
上面分别为公共用户和当前用户的桌面、开始菜单、启动菜单的目录。
procedure TForm1.Button1Click(Sender: TObject);
var
tmpObject : IUnknown;
tmpSLink : IShellLink;
tmpPFile : IPersistFile;
PIDL : PItemIDList;
StartupDirectory : array[0..MAX_PATH] of Char;
StartupFilename : String;
LinkFilename : WideString;
begin
StartupFilename := 'c:\windows\notepad.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; 你可以把StartupDirectory设成你所要的目录。