CShortcut(指向特殊文件夹的 Shell 链接)






4.89/5 (44投票s)
2004 年 5 月 9 日
4分钟阅读

177939

4508
这个类使您能够创建指向任何文件/文件夹(如“开始”菜单、“发送到”上下文菜单等)的快捷方式。
引言
这个类使您能够轻松创建 Shell 链接(快捷方式),就像您在 Windows 中随处可见的那样(例如:在桌面上,“发送到”上下文菜单中,“开始”菜单中......)。您还可以为链接添加描述或命令行参数。使用这个类创建快捷方式真的非常简单。请查看演示项目,看看它有多容易!
关于演示项目的一些说明
- 每次写入快捷方式且程序运行时,图标都会更改。图标是从
shell32.dll
中提取的。 - 此演示程序写入的链接名称始终是“Test Link”,无论链接创建在哪个文件夹中。
- 程序启动时,它会检测是否存在快捷方式。如果存在,选项按钮旁边的文本
将更改,文本颜色也将变为红色。如果没有
,文本将为蓝色。写入或删除链接时也会发生同样的情况。 - 如果您在“发送到”菜单中创建链接,您可以这样测试它
- 在“发送到”上下文菜单中创建一个快捷方式
- 打开资源管理器,右键单击文件并选择“发送到”菜单项
- 现在会弹出另一个菜单,您应该选择“Test Link”
- CShortcut 演示程序启动,一个消息框会显示您“发送到”的文件的路径和文件名。
使用代码
1. 将文件 Shortcut.h 和 Shortcut.cpp 添加到您的项目中并包含头文件
#include "Shortcut.h"
2. 创建 CShortcut 类的一个变量。例如
m_pShortcut // a pointer to CShortcut
3.1. 如果需要命令行参数,请调用 SetCmdArguments
函数
SetCmdArguments(CString sArg)
CString
是您需要与文件一起调用的参数
3.2 调用 CreateShortCut
函数创建快捷方式(函数名说明了一切 ;-))
CreateShortCut(CString LnkTarget, CString LnkName, UINT SpecialFolder, CString LnkDescription, CString IconLocation, UINT IconIndex)
LnkTarget
链接指向的文件/文件夹LnkName
快捷方式的名称SpecialFolder
将快捷方式放置的位置(见下文,或查看
MSDN --> SHGetSpecialFolderLocation 以获取更多文件夹)LnkDescription
应用程序可以使用它存储任何文本信息,并且可以
使用“IShellLink::GetDescription”检索它IconLocation
包含要使用的图标的文件的路径。可以是一个
空字符串IconIndex
文件中图标的索引
SpecialFolder 的定义
定义 |
描述 |
CSIDL_SENDTO |
发送到菜单/文件夹 |
CSIDL_DESKTOP |
当前用户的桌面 |
CSIDL_COMMON_DESKTOP |
所有用户的桌面 |
CSIDL_STARTUP |
当前用户的自动启动 |
CSIDL_COMMON_STARTUP |
所有用户的自动启动 |
CSIDL_STARTMENU |
当前用户的开始菜单 |
CSIDL_COMMON_STARTMENU |
所有用户的开始菜单 |
CSIDL_PROGRAMS |
当前用户的程序菜单 |
还有更多...
4. 您想删除快捷方式?好的,继续阅读。只需使用 DeleteShortCut
DeleteShortCut(CString LnkName, UINT SpecialFolder)
LnkName
快捷方式的名称SpecialFolder
再次是一个特殊文件夹的定义(见 CreateShortCut)
5. 您想检测快捷方式?那么使用 isLinkAvailable
isLinkAvailable(CString LnkName, UINT SpecialFolder)
LnkName
快捷方式的名称SpecialFolder
再次是一个特殊文件夹的定义(见 CreateShortcut)
6. 现在您可以解析并检索快捷方式的描述,使用
ResolveLink(CString LnkName, UINT SpecialFolder, HWND hwnd, CString &LnkPath, CString &LnkDescription)
LnkName
快捷方式的名称SpecialFolder
快捷方式的位置hwnd
父窗口的句柄,用于 shell 可能显示的任何消息框。&LnkPath
接收对象路径的字符串引用&LnkDescription
接收链接描述的字符串引用
7. 还有两个内部使用的 私有
辅助例程
GetSpecialFolder
这个例程是一个辅助函数,用于查找特殊文件夹的路径ShortToLongPathName
这个例程是一个辅助函数,用于从 8.3 格式构建长路径。我知道存在一个名为GetLongPathName
的函数,但我有一半时间在使用“旧”的 NT4 系统,而这个函数在那里不可用!
现在您已准备好在您的计算机上创建指向任何内容的链接。>B-}
致谢
我要感谢通过他或她出色的代码使这个类成为可能的程序员IShellLink
实现!我真的不记得在哪里找到的了。抱歉!还要感谢 Michael Dunn 撰写的精彩文章 COM 简介 - 它是什么以及如何使用它
这样做的原因
我需要让我的一个小应用程序的用户可以选择通过
右键单击“发送到”菜单将文件发送到我的程序。经过几个小时的搜索,我有了足够的材料和信息来开发这个类(我第一次接触 COM 技术)。
您不仅可以将可执行文件放入“发送到”菜单,还可以放入文件夹,这对于搜索和收集一些文件并稍后压缩它们(例如)非常有用。您会发现使用链接可以做很多有用的事情。另一种可能性是将某些东西链接到控制面板。或者您可以......
历史
2004年5月12日 - 添加了解析 ShellLink 的例程