关于快捷方式是否存在...?(50分)

I

ili

Unregistered / Unconfirmed
GUEST, unregistred user!
我用一下方法创建桌面快捷方式
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ShellApi, ShlObj, ActiveX, ComObj, Registry;
......
procedure TFormAbout.SetLink(linkfile, programfile: string);
var
Reg: TRegIniFile;
WFileName: WideString;
AnObj: IUnKnown;
Shlink: IShellLink;
PFile: IPersistFile;
begin
AnObj := CreateComObject(CLSID_ShellLink);
shLink := AnObj as IShellLink;
PFile := AnObj as IPersistFile;
shLink.SetWorkingDirectory(PChar(ProgramFile));
programfile:=programfile+'/iFORM.exe';
shLink.SetPath(PChar(programfile));
Reg := TRegIniFile.Create('Software/MicroSoft/Windows/CurrentVersion/Explorer');
WFileName := Reg.ReadString('Shell Folders', 'Desktop', '') + '/' + linkfile + '.lnk';
PFile.Save(PWChar(WFileName), True);
Reg.Free;
end;
可我现在想知道桌面上是否已经存在这个快捷方式,该怎么判断?
 
大哥大嫂(有么?)行行好吧,可怜可怜我这个三天没吃饭的了(都吃面了).....
 
用FILEEXIST函数吗(DELPHI自带的),自己看看帮助:)
 
???可行么?
那98和2000是不一样的呀!
98:C:/WINDOWS/Desktop
2000:D:/Documents and Settings/islet8/桌面

怎么办?
 
那就先判断运行环境是98还是2000,
 
我倒~~~~~~~~~~~就没有好一点的方法了么?创建图标就不需要判断系统!
 
晕倒,你先判断Desktop文件夹的位置即可。
ShGetSpeicalFolderLocation() API,自己看帮助,读取注册表也可以啊。
 
To :Kingron

我就想用读注册表的方法,可不知该读哪个主键下的??
 
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/User Shell Folders
-->Desktop
 
To :Kingron

这两个都是的么?应该用哪个?
 
第一个注册表键下的就行。无论是2000还是98下都可以的:)

BTW 问一句,ili你是刚学DELPHI的吗?接触电脑多久了:)
 
一般情况下两个都是!如果有多个用户,就不一定了。这是兼容性的问题。
用Win98及其以上的系统,两个是一样的。随便那个都可以,最好用那个user shell foloder。
推荐用API SHGetDesktopFolder来取得桌面目录。
 
To iamfly:

呵呵,不好意思,这个暑假才开始学的delphi,以前学过一点pascal,电脑是99年底开始懂的。不要笑我:(
 
ShGetSpeicalFolderLocation
SHGetDesktopFolder
???到底哪个?为什么D5总说“未声明”??help里也没有这两个东东!
 
ili, 帮助里可不是什么都有 :)
这两个函数是Windows API 函数,都可以在 Windows SDK 的帮助里找到,
实际是在Dll中声明了,在Delphi中使用的话自己声明一下就可以了
比较详细的帮助还是自己查查MSDN吧
 
有没有uses ShellAPI 单元???[:p]
 
To wjiachun:
我就是在Win SDK里找不到这两个东东

To dingbaosheng:
已经uses ShellApi,但是因为找不到帮助,不知里面的参数怎么填写....
 
怎么会没有呢?我的怎么有??复制一个给你看看!

SHGetDesktopFolder
[Now Supported on Windows NT]

Retrieves the IShellFolder interface for the desktop folder,
which is the root of the shell's name space.

WINSHELLAPI HRESULT WINAPI SHGetDesktopFolder(

LPSHELLFOLDER *ppshf
);


Parameters

ppshf

Address that receives an IShellFolder interface pointer for the desktop
folder. The calling application is responsible for eventually freeing
the interface by calling its Release method.



Return Values

Returns NOERROR if successful or an OLE-defined error result otherwise.

See Also

IShellFolder

dingbaosheng: ShellAPI 没有封装所有的API。
 
Delphi的Help菜单下面明明有一个Windows SDK,自己没有看到吗?
回答你的问题,真的是给我1000分,都怕麻烦。
 
To Kingron:
我说的是在Win SDK里找不到ShGetSpeicalFolderLocation,SHGetDesktopFolder
呵呵

To wjiachun:
多谢:)

一会儿给二位加分,呵呵,是不是有K大哥嫌分少的呀,那你说怎么办吧,我现在只有308分
 
顶部