原文:http://blog.163.com/eagle_225/blog/static/3544934520096293307677/
一、快捷方式的获取
SHGetShortcutTarget
功能:
获取快捷方式的目标路径
原型:
BOOL SHGetShortcutTarget(
LPTSTR szShortcut,
LPTSTR szTarget,
int cbMax
);
参数:
szShortcut :包含快捷方式名字的字符串
szTarget :包含快捷方式目标路径的字符串, 字符串的大小至少是cbMax。
cbMax :将被拷贝到缓存szTarget的最大字符串
返回值:
成功返回TRUE,否则返回FALSE。
示例代码:
TCHAR StartMenuFilePath[MAX_PATH];
//第三个参数很有用,能够获得系统的一些目录。具体参考它的参数
::SHGetSpecialFolderPath(NULL, StartMenuFilePath, CSIDL_PROGRAMS, FALSE);
TCHAR szShortPath[MAX_PATH];
wsprintf(szShortPath, _T("%s//%s"), StartMenuFilePath, _T("搜索.lnk"));
TCHAR szFilePath[MAX_PATH];
:SHGetShortcutTarget(szShortPath, szFilePath, sizeof(szFilePath));
执行完毕后,
szFilePath 的值为shfind.exe
二、快捷方式的创建
SHCreateShortcut
功能:
创建快捷方式。
原型:
DWORD WINAPI SHCreateShortcut(
LPTSTR szShortcut,
LPTSTR szTarget
);
参数:
szShortcut :包含快捷方式名字和路径的字符串。在路径指定的位置创建快捷方式。
szTarget: 包含快捷方式目标路径和参数的字符串。大小限定在256个字符以内。
返回值:
成功返回TRUE,否则返回FALSE。如果指定的快捷方式已经存在的话将返回FALSE。
示例代码:
SHCreateShortcut(_T("//搜索.lnk"), _T("shfind.exe"));
执行结果为在根目录下创建了“搜索.lnk”这个快捷方式文件。
三、补充说明
这里主要针对获取快捷方式的内容进行几点说明:
我们获取快捷方式的时候,内容不一定只包含路径,有可能存在一下的情况,如:
1、路径后跟随名称
/Windows/“开始”菜单/程序/任务.lnk
2、缩写名
poutlook.exe tasks
/Windows/“开始”菜单/程序/ActiveSync.lnk
:MSSYNCAPP
3、路径后跟随数字
/Windows/“开始”菜单/程序/游戏/icon.lnk
shellres.dll,-8229
考虑以上这几种情况,我们在获取快捷方式路径时,需要对路径做一些特殊处理。这里重点说一下第二种情况,这个缩写代表什么意思?在网上搜索了一下,原来我们可以在[HKEY_LOCAL_MACHINE/Software/Microsoft/Shell/Rai/]键值下找到名为:MSSYNCAPP的子键,键值为1的子键数值指明了名为:MSSYNCAPP的程序名称。但我们从这里获得的值,有时也不是路径,还会再次出现上述三种情况。所以,如果我们想从快捷方式中获取路径的话,就需要留意一些了。
特别注意:
指定的目标在 SHCreateShortcut() 调用可能包含参数的 调用 为 时传递给目标是 快捷方式启动的 目标命令 (包括路径) 中的任何空格 由于空间将用作目标命令和参数之间的分隔符,必须括在双引号现象 ation 标记 s。
是例如 C 字符串表示路径 "/Hard Disk/target.exe ,使用 "-在" 的一个参数可以定义为:
LPTSTR szTarget = _T("//Hard Disk//target.exe -a");
程序路径包含空格,会因此需要将用双引号括起来,如下所示:
LPTSTR szTarget = _T("/"//Hard Disk//target.exe/" -a");
注释 如果您执行不此路径双引号括,并且如果尝试使用此链接,系统将尝试启动不存在的程序名为 /Hard 。