原理:
1 CoInitialize(NULL);//初始化COM库
2 CoCreateInstance(..)//创建一个为初始化的类的对象这个类对象与特定的CLSID相关联,CLSID是一个程序关联的标志符
STDAPI CoCreateInstance(
REFCLSID rclsid,//类对象ID
LPUNKNOWN pUnkOuter,//未知控制的指针
DWORD dwClsContext,//运行可执行代码的句柄
REFIID riid,//接口标号的引用
LPVOID * ppv//输出变量的接受地址
);
IShellLink:IShellLink允许Shell链接的创建,修改和解析。Shell Links为用户提供了一种非常简单的方法去访问和操纵对象,无论这个对象的路径和名称如何。
IPersistFile:可以将一个对象(非流或存储对象)从文件中读取出来或者存成文件,IPersistFile继承了IPersist的定义,因此所有的应用都必须包过IPersist的GetClassID方法。
步骤:
1 :
char DesktopLocate[MAX_PATH];//桌面快捷方式保存位置
//用CLSID的shell方法得到桌面保存的位置
SHGetSpecialFolderPath(NULL,DesktopLocate,CSIDL_DESKTOP,0);
2 得到需要创建的快捷方式的名称
得到需要创建的快捷方式的路径
char LinkName[MAX_PATH];
GetDlgItemText(IDC_EDIT2,LinkName,200);//得到需要创建的快捷方式的名称
char PathName[MAX_PATH];
GetDlgItemText(IDC_EDIT1,PathName,200);//得到需要创建的快捷方式的路径
strcat(DesktopLocate,"//");
strcat(DesktopLocate,LinkName);
strcat(DesktopLocate,".LNK");
3 (1)CoInitialize(NULL);//初始化COM
IShellLink* MyLink;//IShellLink接口指针
IPersistFile* ppf;//IPersistFile接口指针
(2)//创建一个COM类对象
int re=CoCreateInstance(CLSID_ShellLink,NULL,CLSCTX_ALL,IID_IShellLink,(void**)&MyLink);//找到IShellLink接口
(3)
MyLink->SetPath(&PathName[0]);//设置快捷方式的实际文件位置
MyLink->SetDescription(&LinkName[0]);//设置快捷方式的描述名称
re=MyLink->QueryInterface(IID_IPersistFile,(void**)&ppf);//查询接口
(4)最后一步
WCHAR wsz[MAX_PATH];
MultiByteToWideChar(CP_ACP,0,DesktopLocate,-1,wsz,MAX_PATH);//转化成Unicode版本
ppf->Save(wsz,true);//在桌面创建快捷方式
ppf->Release();
MyLink->Release();
//----------------------------------------------------------------
活动桌面
原理
在注册表HKEY_CURRENT_USER的"Software//Microsoft//Internet Explorer//Desktop//Components//" 如果没有任何活动的桌面,那么这个路径下只会有一个"0"项,打开他就会发现当前主页的名称以及在桌面的位置和状态。所以只要能够在这个路径下创建相关的以数字命名的项并且设置这个项中的各种键值就行。
步骤:<#include <atlbase.h>>头文件
1 获得URL;
2 在注册表中,创建一个“1”命名的项
key.Create(HKEY_CURRENT_USER,"Software//Microsoft//Internet Explorer//Desktop//Components//1")
3 (1)创建CrrentState建和键值,他标识当前这个活动桌面显示的状态key.SetValue(1,"CurrentState");
(2)创建Flags键和键值key.SetValue(1002,"Flags");
(3)创建OriginalStateInfo键和键值key.SetValue(0x10,"OriginalStateInfo");
(4)设置位置键和键值key.SetValue(0x10,"Position");
(5)设置存储状态信息键和键值key.SetValue(0x10,"RestoredStateInfo");
(6)设置URL
key.SetKeyValue("",url,"Source");
key.SetKeyValue("",url,"SubscribedURL");
(7)设置别名key.SetKeyValue("",url,"FriendlyName");
(8)key.Close();