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

  • 内容
  • 评论
  • 相关

作者: 小林

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

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

http://www.gaodaima.com/?p=65351获取系统上的用户注册信息

步骤
  按照下列步骤实现一个例子程序。运行此例子程序,选择菜单 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 来完成的。

欢迎大家阅读《获取系统上的用户注册信息》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码

原创文章,转载请注明: 转载自搞代码

本文链接地址: 获取系统上的用户注册信息

微信支付二维码

微信 赏一包辣条吧~

支付宝支付二维码

支付宝 赏一听可乐吧~

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注