招生考试网
学历| 高考 美术高考 考研 自考 成考 专升本 中考 会考 外语| 四六级 职称英语 商务英语 公共英语 日语能力 翻译资格 JTEST
资格| 公务员 报关员 银行从业 司法 导游 教师资格 报关 财会| 会计证 经济师 会计职称 注册会计 税务师 资产评估 审计师
工程| 一建 二建 造价师 造价员 咨询师 监理师 安全师 医学| 卫生资格 执业医师 执业药师 执业护士 | 教案 论文 文档
IT类| 计算机等级 计算机软考 职称计算机 高校计算机 推荐-国家公务员 事业单位招聘 军校国防生 自主招生 艺术特长生 招飞
 3773考试网 - 计算机等级考试 - 高校计算机 - 正文

Delphi实现对注册表的监视和扫描

来源:fjzsksw.com 2009-11-3 17:49:06

begin
  CloseHandle( hNotify );
  RegCloseKey( hKeyx );
  Showmessage(\’RegNotifyChangeKeyValue failed\’);
  exit;
  end;
  dwRes := WaitForSingleObject( hNotify, 60 * 1000 ); //监视一分钟
  if dwRes = 0 then
  Showmessage( \’Registry will be changed.\’ );
  CloseHandle( hNotify );
  RegCloseKey( hKeyx );
  end;
  要注意的是,API: WaitForSingleObject要等到注册表变化事件发生或者超时才会返回,在此期间我们的程序将失去响应。解决的办法是新建一个线程,在新线程中监视注册表。
  对注册表进行扫描要用到另外两个API: RegEnumKey和RegEnumValue。
  LONG RegEnumKey(
  HKEY hKey, // 要扫描的注册表项目句柄
  DWORD dwIndex, // 要扫描的subkey序号
  LPTSTR lpName, // 要扫描的subkey名称
  LPDWORD lpcbName, // 要扫描的subkey名称占用空间
  );
  此函数的使用方法是: 首先给dwIndex赋值0, 调用RegEnumKey; 然后Inc(dwIndex), 再调用RegEnumKey,直到返回值为ERROR_NO_MORE_ITEMS,表示没有更多的子项了。
  //扫描注册表的例子
  //只演示了如何枚举HKEY_CURRENT_USER\\Software下的一层子项
  procedure TForm1.Button2Click(Sender: TObject);
  var
  buf : array [0..255] of char;
  iRes: integer;
  hKeyx : HKEY;
  dwIndex, dwSize : DWORD;
  begin
  if RegOpenKeyEx( HKEY_CURRENT_USER, \’Software\’, 0, KEY_READ or
  KEY_ENUMERATE_SUB_KEYS, hKeyx ) <> ERROR_SUCCESS then
  begin
  Showmessage(\’RegOpenKeyEx failed.\’);
  exit;
  end;
  dwIndex := 0;
  repeat
  dwSize := 255;
  iRes := RegEnumKey( hKeyx, dwIndex, buf, dwSize );
  if iRes = ERROR_NO_MORE_ITEMS then
  break
  else if iRes = ERROR_SUCCESS then
  begin
  Listbox1.Items.Add( buf );
  Inc( dwIndex );
  end;
  until iRes <> ERROR_SUCCESS;
  RegCloseKey( hKeyx );
  end;

上一页  [1] [2] [3] [4] [5] 下一页



  • 上一个文章:
  • 网站版权与免责声明
    ①由于各方面情况的不断调整与变化,本网所提供的相关信息请以权威部门公布的正式信息为准.
    ②本网转载的文/图等稿件出于非商业性目的,如转载稿涉及版权及个人隐私等问题,请在两周内邮件fjksw@163.com联系.
    最新文章


    | 关于我们 | 联系我们 | 版权申明 | 网站导航 |
    琼ICP备12003406号