【转】Windows Mobile 快捷方式的读取和创建

来源:互联网 发布:知乎修改关注话题 编辑:程序博客网 时间:2024/05/21 14:10

原文: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 。

原创粉丝点击