今天这篇文章的主题就是如何获取Windows Mobile设备中的MRU(最近打开文件列表)
关于MRU的获取,有2种方法。
先来介绍用.net开发的方法---访问注册表。
在注册表的:[HKEY_CURRENT_USER/Software/Microsoft/Shell/TaskSwitch]中,存有所有的MRU中的信息。可能你访问的时候会有很多,但在Windows Mobile显示的时候,只显示从0开始的几项(一般为5项)。
代码演示效果:
WM上显示的MRU
程序获取到的MRU信息:
注意看0项,就是和前面MRU排在第一位的计算器一致,而且,注册表里存的是绝对路径,可以启用进程来直接访问。
启用进程的方法:
1 Process XXX = new Process();
2 XXX.StartInfo.FileName = "路径+文件名";
3 XXX.StartInfo.Arguments = 参数;
2 XXX.StartInfo.FileName = "路径+文件名";
3 XXX.StartInfo.Arguments = 参数;
访问注册表的方法:
1 private void menuItem1_Click(object sender, EventArgs e)
2 {
3 string strRegPath = @"Software/Microsoft/Shell/TaskSwitch";
4 RegistryKey regCurrentUser = Registry.CurrentUser.OpenSubKey(strRegPath);
5 string[] strList = regCurrentUser.GetValueNames();
6
7 string strKeyValue = "";
8 foreach (string strKey in strList)
9 {
10 strKeyValue = "";
11 strKeyValue = regCurrentUser.GetValue(strKey, "").ToString();
12 listBox1.Items.Add(string.Format("{0} - {1}", strKey, strKeyValue));
13 }
14 regCurrentUser.Close();
15 }
2 {
3 string strRegPath = @"Software/Microsoft/Shell/TaskSwitch";
4 RegistryKey regCurrentUser = Registry.CurrentUser.OpenSubKey(strRegPath);
5 string[] strList = regCurrentUser.GetValueNames();
6
7 string strKeyValue = "";
8 foreach (string strKey in strList)
9 {
10 strKeyValue = "";
11 strKeyValue = regCurrentUser.GetValue(strKey, "").ToString();
12 listBox1.Items.Add(string.Format("{0} - {1}", strKey, strKeyValue));
13 }
14 regCurrentUser.Close();
15 }
记得最后要关闭注册表。
注意事项:
当你看到这里时,想,既然可以取到对应的值,那是否可以修改呢,然后就可以自己控制了呢?
很遗憾,即使你将值修改了,MRU列表也不会发生变化。(肯定还依赖于别的地方,暂时我还没找到)
方法二:用c++操作:
下面介绍下,在WM的界面上的未读短信数和邮件数的获取
注册表[HKEY_CURRENT_USER/System/State/Messages/TotalEmail/Unread]的Count表示邮件未读数量
注册表[HKEY_CURRENT_USER/System/State/Messages/sms/Unread]的Count表示短信未读数量
最后补充一个小技巧,如何读取远程计算机的注册表。
使用VS2005或VS2008菜单中Remote Tools下的Remote Registry Editor工具。
可以连接到WM设备来看其注册表键值。
代码下载:DeviceMRUDemo.rar