新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 C/C++编程思想 』 → 获取系统上的用户注册信息 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 3276 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 获取系统上的用户注册信息 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 C/C++编程思想 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 获取系统上的用户注册信息

    问题
      有的程序员希望能够显示当前安装的 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 来完成的。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/4/9 9:50:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/2/9 2:10:19

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    4,088.867ms