快捷方式的读取和创建
一、快捷方式的获取
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的程序名称。但我们从这里获得的值,有时也不是路径,还会再次出现上述三种情况。所以,如果我们想从快捷方式中获取路径的话,就需要留意一些了。
至于为什么会这样,我还不是很明白。
posted on 2009-07-23 18:13
Sandy 阅读(1611)
评论(1) 编辑 收藏 引用 所属分类:
Windows Mobile