关于WCE中的LNK文件

   WCE的[Windows]-[Start Menu]下有很多的LNK文件,这些是AP的快捷方式。很多程序都喜欢遍历出PPC上的AP,然后进行设置操作,在该目录下进行遍历是很常见的一种做法。

   LNK文件中的内容类似:0#peghelp.exe?ceshell.dll,-8212,其中有编号和供SHELL调用的运行参数,该运行参数有些指明了EXE文件的详细地址,例如:34#"\Program Files\Camera\Camera.exe";有些根本就无法识别,例如:21#:MSPPT,这个是Power Point的LNK文件的内容。如何通过LNK文件来获得AP的名称呢?下面是我的心得:

   首先获取LNK文件的运行参数,使用函数SHGetShortcutTarget,该函数为WCE所特有,并且MSDN本地版上没有关于该函数的介绍,MSDN ONLINE上有这个函数的使用说明:
 

Platform Builder for Microsoft Windows CE 5.0

SHGetShortcutTarget

Send Feedback

This function retrieves the shortcut's target path. A remote application interface (RAPI) version of this function exists, CeSHGetShortcutTarget (RAPI).

Syntax

BOOL SHGetShortcutTarget(
 LPTSTR szShortcut, 
  LPTSTR szTarget, 
  int cbMax 
);

Parameters

szShortcut

[in] Null-terminated string that contains the name of the shortcut.

szTarget

[in] Null-terminated string that gets the target path of the shortcut. The buffer must be at least cbMax characters long.

cbMax

[in] Maximum number of characters that can be copied to the buffer.

Return Values

TRUE indicates success. FALSE indicates failure.

Requirements

OS Versions: Windows CE 1.0 and later.
Header: Shellapi.h.
Link Library: Coredll.lib.

   拿PPT的LNK文件为例,SHGetShortcutTarget("\Windows\Start Menu\Office Mobile\PowerPointMobile.lnk", szTarget, MAX_PATH); 即可在szTarget字符串BUFFER中获得:MSPPT这个结果,需要注意的是,有些Target字符串结尾有一些特殊的不显示的字符,例如这个:MSPPT字符串后面就跟这数值为13和5的字符,由于后面要使用到该字符串,所以需要引起注意。

   对于:MSPPT这个字符串,无法直接解析AP的实际名称。通过调查注册表,我发现在[HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\Rai\]位置存在关于名为:MSPPT等的子键,:MSPPT的子键数值如下:
 

Name

Value

4

00 00 00 00 00 00 00 00

3

0

2

0

1

ppt.exe

0

BlackWindow

   虽然无法解读这些以数值为名称的键值有什么含义,但至少可以看出,键值为1的子键数值指明了名为:MSPPT的AP名称。关于这些键值的含义,希望有知道的大虾能够告知,或者提供相关资料的链接,因为我找了好久没有找到。
   这里有两点需要注意:
      1.  键值为1的子键数值有些并没有直接提供AP名称,例如:MSTASKS的子键1的数值为“:MSPOUTLOOK tasks”,因此,需要继续遍历以获取实际的AP名称。
      2. 前面提到的通过SHGetShortcutTarget得到的Target字符串结尾有些不显示的隐藏字符,对于这些字符应该剔除掉,否则无法定位成功注册表中的正确位置。

   通过上述两步即可得到LNK文件对应的AP名称,希望这篇总结可以对大家有所帮助,也希望CPPBLOG中的大虾们能够参与讨论,给予指导。

   PS: 通过查阅资料发现,PC上可以使用IShellLink接口对LNK文件进行很复杂的操作,但貌似WCE上对该接口不支持,因为关于IShellLink的GUID和UUID定义都被MARK掉了。

posted on 2008-05-26 11:11 迷宫の未来 阅读(1872) 评论(2)  编辑 收藏 引用

评论

# re: 关于WCE中的LNK文件 2008-06-07 10:00 eyu

不知道是什么  回复  更多评论   

# re: 关于WCE中的LNK文件 2008-06-26 10:06 argen

太谢谢了,正找呢  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

常用链接

留言簿(10)

随笔档案

文章档案

最新随笔

搜索

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜