快捷方式和活动桌面小贴


原理:
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();

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值