春暖花开
雪化了,花开了,春天来了
posts - 149,comments - 125,trackbacks - 0

快捷方式的读取和创建

一、快捷方式的获取

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 阅读(1564) 评论(1)  编辑 收藏 引用 所属分类: Windows Mobile

FeedBack:
# re: Windows Mobile 快捷方式的读取和创建
2010-01-20 08:57 | beeboo
好文章!灰常有用  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理