NETCF开发之注册表编程(1)

1.1 概述

注册表是一个存储设备,包含有关应用程序、用户和默认系统设置的信息。例如,应用程序可使用注册表来存储在应用程序关闭后需要保留的信息,并可在应用程序重新加载时访问这些信息。例如,可以存储颜色首选项、屏幕位置或窗口大小。通过将信息存储在注册表中的不同位置,可以为各位用户分别控制这些数据。

Pocket PC应用程序开发完成并分发到用户手中后,在应用程序运行时同样可能需要记录一些程序配置信息,例如需要存储一个***或者一个版本信息,或者在Pocket PC应用程序的Logo界面里显示用户姓名和工作单位等信息。在.NET Compact Framework 2.0中,新增了Microsoft.Win32命名空间的Registry类。通过Registry类可以很容易地在Pocket PC应用程序里处理Pocket PC智能设备的注册表。

本章接下来介绍如何通过.NET Compact Framework,进行Windows Mobile注册表的应用和开发,并提供一个读取Pocket PC智能设备Owner信息的注册表应用开发示例。

1.2 Windows Mobile注册表

Windows Mobile中,系统配置信息仍然集中存储在称为注册表的分层数据库中。注册表代替了以往在.ini.sys.com等文件里存储应用程序配置信息的实现方法。

1.2.1 注册表结构

注册表是按照子树(根项)、子树的项、子项和值项的层次结构组织的。由于每台Pocket PC智能设备上安装的硬件设备、系统服务和程序有所不同,因此一台Pocket PC智能设备上的注册表内容可能与另一台有很大的不同。

注册表项可以有子项,同样,子项也可以有子项。尽管注册表中的大多数信息都存储在磁盘上,并且被永久保存,但是存储在某些子项中的一些信息在每次操作系统启动时都会被覆盖。

1.2.2 注册表子树

Windows Mobile具有两个注册表子树:HKEY_LOCAL_MACHINE HKEY_USERS。不过,为了使注册表中的信息易于查找,在用Visual Studio 2005自带的“远程注册表编辑器”工具查看时显示有四棵子树,其中两棵是注册表其他部分的别称。表18-1列出并说明了这四棵子树。图18-1展示了Windows注册表和Windows Mobile注册表之间的差别。

18-1:注册表子树

根项名称

说明

HKEY_LOCAL_MACHINE

包含关于本地计算机系统的信息,包括硬件和操作系统数据,如总线类型、系统内存、设备驱动程序和启动控制数据。

HKEY_CLASSES_ROOT

包含用于各种OLE技术和文件类关联数据的信息。如果HKEY_CURRENT_USER\SOFTWARE\ClassesHKEY_LOCAL_MACHINE\SOFTWARE\Classes中存在相应的项或值,则在HKEY_CLASSES_ROOT中会存在某个特定的项或值。如果两处均存在项或值,则HKEY_CURRENT_USER版本将是出现在HKEY_CLASSES_ROOT中的那一个。

HKEY_CURRENT_USER

包含当前以交互方式(与远程方式相反)登录的用户的用户配置文件,包括环境变量、桌面设置、网络连接、打印机和程序首选项。该子树是 HKEY_USERS 子树的别名,它指向 HKEY_USERS\当前用户的安全 ID

HKEY_USERS

包含关于动态加载的用户配置文件和默认配置文件的信息。它包含同时出现在 HKEY_CURRENT_USER 中的信息。正在远程访问服务器的用户在服务器上的该项下没有配置文件;他们的配置文件将加载到自己计算机的注册表中。

NETCF开发之注册表编程(1)

<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="[email protected]@[email protected]@[email protected]@[email protected]@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 146.25pt; HEIGHT: 193.5pt" type="#_x0000_t75"><imagedata o:title="" src="file:///D:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.png"></imagedata></shape>

18-1WindowsWindows Mobile的注册表之间的差别

每个根项名均以HKEY_开头,以便向软件开发人员指出这是可以由程序使用的句柄。句柄是一个值,用于识别资源。有了句柄,程序就能对资源进行访问。

1.2.3 注册表值项

每个注册表项或子项都可以包含称为值项的数据。有些值项存储特定于每个用户的信息,而其他值项则存储应用于计算机所有用户的信息。值项具有三部分:值的名称、值的数据类型和该值本身。通过Visual Studio 2005自带的“远程注册表编辑器”工具查看时,值项的显示如图18-2所示。

NETCF开发之注册表编程(1)

<shape id="_x0000_i1026" style="WIDTH: 281.25pt; HEIGHT: 189pt" type="#_x0000_t75"><imagedata o:title="" src="file:///D:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image003.png"><font face="Times New Roman" size="3"></font></imagedata></shape>

18-2:注册表项中的值项