【COM/ATL】创建Url快捷方式
2014-06-19 16:31
169 查看
需要实现创建.url快捷方式的功能,网上看了一下,几乎都是通过写ini文件的方式做的,不得不说,这种方式简单有效。
但是对于有点强迫症的我来说,还是想通过API这种比较正规的方式去做,于是查了一下相关资料
微软已经提供了对应的COM接口来做这个事。
因为COM的知识点比较多,对于上面的代码就没有详细说明了,只把关键设置属性的几个地方注释了一下
运行后会在C盘根目录下创建一个.url快捷方式,图标使用windows的记事本。
Win7 x64产生的.url文件内容:
而在XP SP3下创建是这样的:
是的,属性压根就没写进去,不知道是什么原因造成的,如果你知道了,请告诉我。^_^
参考资料:http://msdn.microsoft.com/en-us/library/bb776784(v=vs.85).aspx
但是对于有点强迫症的我来说,还是想通过API这种比较正规的方式去做,于是查了一下相关资料
微软已经提供了对应的COM接口来做这个事。
#include "stdafx.h" #include <iostream> #include <windows.h> #include <IntShCut.h> #include <ShlObj.h> #include <propvarutil.h> #pragma comment(lib, "shlwapi.lib") void CreateInternetShortcut(LPCWSTR destUrl, LPCWSTR destFile) { CoInitialize(nullptr); IUniformResourceLocatorW *url = nullptr; if (SUCCEEDED(CoCreateInstance(CLSID_InternetShortcut, nullptr, CLSCTX_INPROC_SERVER, IID_IUniformResourceLocatorW, (LPVOID*)&url))) { if (SUCCEEDED(url->SetURL(destUrl, IURL_SETURL_FL_GUESS_PROTOCOL))) { IPropertySetStorage *pss = nullptr; if (SUCCEEDED(url->QueryInterface(IID_IPropertySetStorage, (void**)&pss))) { IPropertyStorage *ps = nullptr; if (SUCCEEDED(pss->Open(FMTID_Intshcut, STGM_WRITE, &ps))) { // 设置两个属性,一个图标文件路径,一个图标索引 PROPSPEC pids[2] = { { PRSPEC_PROPID, PID_IS_ICONFILE }, { PRSPEC_PROPID, PID_IS_ICONINDEX } }; PROPVARIANT pvar[2]; // 图标文件指向Windows自带记事本 InitPropVariantFromString(L"C:\\Windows\\notepad.exe", &pvar[0]); // 图标索引设置为1,也就是第一个图标 InitPropVariantFromInt16(0, &pvar[1]); ULONG n = sizeof(pids) / sizeof(pids[0]); // 写入属性 ps->WriteMultiple(n, pids, pvar, 0); // 提交修改 ps->Commit(STGC_DEFAULT); ps->Release(); PropVariantClear(&pvar[0]); PropVariantClear(&pvar[1]); } pss->Release(); } IPersistFile *pf = nullptr; if (SUCCEEDED(url->QueryInterface(IID_IPersistFile, (void**)&pf))) { pf->Save(destFile, TRUE); pf->Release(); } } url->Release(); } CoUninitialize(); } int _tmain(int argc, _TCHAR* argv[]) { CreateInternetShortcut(L"http://blog.csdn.net/aqtata", L"C:\\Demo.url"); system("pause"); return 0; }
因为COM的知识点比较多,对于上面的代码就没有详细说明了,只把关键设置属性的几个地方注释了一下
运行后会在C盘根目录下创建一个.url快捷方式,图标使用windows的记事本。
Win7 x64产生的.url文件内容:
[{000214A0-0000-0000-C000-000000000046}] Prop3=19,2 [InternetShortcut] URL=http://blog.csdn.net/aqtata IDList= IconFile=C:\Windows\notepad.exe IconIndex=0
而在XP SP3下创建是这样的:
[InternetShortcut] URL=http://blog.csdn.net/aqtata Modified=70A1A2BF988BCF0165
是的,属性压根就没写进去,不知道是什么原因造成的,如果你知道了,请告诉我。^_^
参考资料:http://msdn.microsoft.com/en-us/library/bb776784(v=vs.85).aspx
相关文章推荐
- 创建.url快捷方式
- urlshortcut_v1.0_[Internet快捷方式创建工具]下载
- 用masm32创建快捷方式--使用com的演示程序
- 使用 COM 类库创建链接桌面快捷方式
- 采用COM方法 创建应用程序的快捷方式(菜鸟版)
- 创建一个用于建立快捷方式的COM 对象并取得IShellLink 接口。
- Android 快捷方式的创建与查询 快捷方式问题大全 获取快捷方式在Launcher数据库中的信息 Failed to find provider info for com.android.la
- C++ 和 com 创建快捷方式
- C# 无需COM组件创建快捷方式的实现代码
- C# 创建Url快捷方式
- 创建快捷方式到[启动]
- 如何在程序中创建快捷方式?
- 在 .NET 中创建快捷方式 [C#]
- 为WEB程序创建桌面快捷方式^_^
- VC学习资料收集(23):创建快捷方式
- 用BCB在windows桌面创建快捷方式
- 在应用程序中创建快捷方式
- 在 .NET 中创建快捷方式 [C#]
- [VC++]如何创建快捷方式 - Web
- VC学习资料收集(24):在应用程序中创建快捷方式