• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

获取系统上的用户注册信息

发布: 2007-7-14 21:11 | 作者: 佚名    | 来源: 网络转载     | 查看: 24次 | 进入软件测试论坛讨论

领测软件测试网 作者: 小林

  问题
  有的程序员希望能够显示当前安装的 Windows 版本的注册用户的信息,此信息包括用户名和单位。但 似乎找不到一个 Windwos API 函数来完成此功能。

方法
  由于没有直接的方法来实现此功能,因此也就找不到单个的 Windows API 函数来显示注册信息,只能 由程序员以高超的编程技巧联合好几个 Windows API 函数来完成此功能。
  有关 Windows 系统注册用户的姓名和单位的信息实际上是保存在 Windows 的系统注册表中。要获取这 些信息,则需要打开注册表,找到正确的条目,然后取回所查找的关键字的值。
  在本节中,将介绍如何在新的 Windows 9x 注册表数据库中查找适当的关键字及其值,从而完成检索用 户信息的任务。

步骤
  按照下列步骤实现一个例子程序。运行此例子程序,选择菜单 SysInfo 中选择菜单项 registration, 则弹出一个对话框,显示 Windows 系统注册用户的姓名和单位。

  实现例子程序的具体步骤如下:
  1.在 Visual C++ 中,利用 AppWizard 创建新的项目文件,并命名此项目文件为 LD15.MAK.
  2.进入 AppStudio 并创建新的对话框,添加两个静态文本域,标题分别为 User name 和 Organization。
  3.与前两个静态文本域对齐,创建另外两个静态文本域,标题为空,ID 分别为 ID_USER_NAME 和 ID_ORGANIZATION。
  4.改变对话框 ID 为 ID_USER_INFO,改变对话框标题为 User Registration Information。
  5.进入 ClassWizard,选择按钮 Add Class。命名新类为 CUserRegDlg,选择基类为 CDIALOG, 并接受源代码和文件名和头文件名的缺省值。
  6.在 ClassWizard,从对象 ID 中选择对象 CUserRegDlg ,选择消息 WM_INITDIALOG,点击按钮 Add Function,在函数 OnInitDialog 中输入下列代码:


BOOL CUserRegDlg::OnInitDialog()
{
CDialog::OnInitDialog();
HKEY hkRoot,hkSubKey;

if(RegOpenKey(HKEY_LOCAL_MACHINE,NULL,&hkRoot)==ERROR_SUCCESS)
{
if(RegOpenKeyEx(hkRoot,
"SOFTWARE\\MICROSOFT\\Windows\\CurrentVersion\\",
0,KEY_ENUMERATE_SUB_KEYS|KEY_EXECUTE|KEY_QUERY_VALUE,
&hkSubKey)==ERROR_SUCCESS)
{
char ValueName[256];

unsigned char DataValue[256];
unsigned long cbValueName=256;
unsigned long cbDataValue=256;

DWORD dwType;

if(RegEnumValue(hkSubKey,4,ValueName,&cbValueName,NULL,
&dwType,DataValue,&cbDataValue)==ERROR_SUCCESS)
{
GetDlgItem(ID_USER_NAME)->
SetWindowText((char *)DataValue);
}

cbValueName=256;
cbDataValue=256;

if(RegEnumValue(hkSubKey,5,ValueName,&cbValueName,NULL,
&dwType,DataValue,&cbDataValue)==ERROR_SUCCESS)
{
GetDlgItem(ID_ORGANIZATION)->
SetWindowText((char *)DataValue);
}
RegCloseKey(hkSubKey);
}
RegCloseKey(hkRoot);
}

return TRUE; // return TRUE unless you set the focus to a control
}

  7.返回 AppStudio,选择菜单 IDR_MAUNFRAME。在主菜单 SysINfo 中添加新的菜单项 User Registration,ID 为 ID_USER_REGISTRATION。
  8.进入 ClassWizard,从下拉列表中选择类 CMainFrame,从对象 ID 列表中选择对象 ID_USER_REGISTRATION,从消息列表中选择消息 COMMAND。点击按钮 Add Function,函数命名为 OnUserRegistration。
  9.选择按钮 Edit Code,在方法 OnUserRegistration 中输入下列代码:

void CMainFrame::OnUserRegistration()
{
CUserRegDlg dlg;

dlg.DoModal();
}

  10.在文件 MAINFRM.CPP 的顶部添加下列行:
#include "UserRegDlg.h"
  11.编译并运行此例子程序。


用法
  要检索用户信息,首先要打开并浏览 Windows 9x 的注册数据库。在此数据库中是一个包含 Windows 9x 系统各方面信息的关键字的层次集合。其中一个关键字可以按路径 SOFTWARE\\MICROSOFT\\Windows\\ CurrentVersion\来查找,此关键字包含检索用户名和单位的有用信息。
  首先,必须打开注册数据库。要做到这一点,需要选择数据库中的一个根层次关键字并打开它。在本节 的例子程序中,此根层次关键字为 HKEY_LOCAL_MACHINE,调用 API 函数 RegOpenKey(或 RegOpenKeyEx) 打开此根层次关键字,然后调用函数 RegOpenKeyEx(在例子程序中示范了这两个函数的使用,其实任一函数 都可用于这两种情况)打开子关键字,并且获得关键字 CurrentVersion 的句柄。
  一旦从注册数据库中检测到句柄,就可以调用函数 RegEnumValue 来检索此关键字的某个值。在本节的 例子程序中,我们感兴趣的两个值序号分别为4和5。一旦检索这两个值,就将其放置在对话框的静态文本 域中,并通过关闭所有打开的关键字来关闭数据库。关闭注册关键字句柄是通过调用 API 函数 RegCloseKey 来完成的。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网