网站首页
网站导航
Ctrl+D收藏
首 页
代码段
源码包
文档库
工具箱
代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
CSharp
】
监视注册表的类 使用WIN32 API
作者:
zgke
/ 发布于
2014/7/29
/
506
使用引用 Microsoft.Win32;
private void button1_Click(object sender, EventArgs e) { Microsoft.Win32.RegistryKey _Key = Microsoft.Win32.Registry.CurrentUser; _Key = _Key.OpenSubKey("SoftWare"); _Key = _Key.OpenSubKey("Microsoft"); _Key = _Key.OpenSubKey("Windows"); _Key = _Key.OpenSubKey("CurrentVersion"); _Key = _Key.OpenSubKey("Run"); T = new Zgke.Copy.MonitorWindowsReg(_Key); T.UpReg += new Zgke.Copy.MonitorWindowsReg.UpdataReg(T__UpdateReg); T.Star(); } void T__UpdateReg(string OldText, object OldValue, string NewText, object NewValue) { object Old = OldValue; object New = NewValue; if (Old == null) Old = ""; if (New == null) New = ""; MessageBox.Show(OldText + ":" + Old.ToString(), NewText + ":" + New.ToString()); } private void button2_Click(object sender, EventArgs e) { T.Stop(); } 下面是具体的类 /// <summary> /// 注册表监视类 /// zgke@Sina.com /// qq:116149 /// </summary> public class MonitorWindowsReg { [DllImport("advapi32.dll", EntryPoint = "RegNotifyChangeKeyValue")] private static extern int RegNotifyChangeKeyValue(IntPtr hKey,bool bWatchSubtree,int dwNotifyFilter,int hEvent,bool fAsynchronus); [DllImport("advapi32.dll", EntryPoint = "RegOpenKey")] private static extern int RegOpenKey(uint hKey, string lpSubKey, ref IntPtr phkResult); [DllImport("advapi32.dll", EntryPoint = "RegCloseKey")] private static extern int RegCloseKey(IntPtr hKey); private static uint HKEY_CLASSES_ROOT = 0x80000000; private static uint HKEY_CURRENT_USER = 0x80000001; private static uint HKEY_LOCAL_MACHINE = 0x80000002; private static uint HKEY_USERS = 0x80000003; private static uint HKEY_PERFORMANCE_DATA = 0x80000004; private static uint HKEY_CURRENT_CONFIG = 0x80000005; private static uint HKEY_DYN_DATA = 0x80000006; private static int REG_NOTIFY_CHANGE_NAME = 0x1; private static int REG_NOTIFY_CHANGE_ATTRIBUTES = 0x2; private static int REG_NOTIFY_CHANGE_LAST_SET = 0x4; private static int REG_NOTIFY_CHANGE_SECURITY = 0x8; /// <summary> /// 打开的注册表句饼 /// </summary> private IntPtr _OpenIntPtr = IntPtr.Zero; private RegistryKey _OpenReg; private Hashtable _Date = new Hashtable(); /// <summary> /// 监视注册表 /// </summary> /// <param name="MonitorKey">Microsfot.Win32.RegistryKey</param> public MonitorWindowsReg(RegistryKey MonitorKey) { if (MonitorKey == null) throw new Exception("注册表参数不能为NULL"); _OpenReg = MonitorKey; string[] _SubKey=MonitorKey.Name.Split('//'); uint _MonitorIntPrt = HKEY_CURRENT_USER; switch (_SubKey[0]) { case "HKEY_CLASSES_ROOT": _MonitorIntPrt = HKEY_CLASSES_ROOT; break; case "HKEY_CURRENT_USER": _MonitorIntPrt = HKEY_CURRENT_USER; break; case "HKEY_LOCAL_MACHINE": _MonitorIntPrt = HKEY_LOCAL_MACHINE; break; case "HKEY_USERS": _MonitorIntPrt = HKEY_USERS; break; case "HKEY_PERFORMANCE_DATA": _MonitorIntPrt = HKEY_PERFORMANCE_DATA; break; case "HKEY_CURRENT_CONFIG": _MonitorIntPrt = HKEY_CURRENT_CONFIG; break; case "HKEY_DYN_DATA": _MonitorIntPrt = HKEY_DYN_DATA; break; default: break; } string _Text = MonitorKey.Name.Remove(0, MonitorKey.Name.IndexOf('//')+1); RegOpenKey(_MonitorIntPrt, _Text, ref _OpenIntPtr); } /// <summary> /// 开始监控 /// </summary> public void Star() { if (_OpenIntPtr == IntPtr.Zero) { throw new Exception("不能打开的注册项!"); } GetOldRegData(); System.Threading.Thread _Thread = new System.Threading.Thread(new System.Threading.ThreadStart(Monitor)); StarMonitor = true; _Thread.Start(); } /// <summary> /// 更新老的数据表 /// </summary> private void GetOldRegData() { _Date.Clear(); string[] OldName = _OpenReg.GetValueNames(); for (int i = 0; i != OldName.Length; i++) { _Date.Add(OldName[i], _OpenReg.GetValue(OldName[i])); } } /// <summary> /// 停止监控 /// </summary> public void Stop() { StarMonitor = false; RegCloseKey(_OpenIntPtr); } /// <summary> /// 停止标记 /// </summary> private bool StarMonitor = false; /// <summary> /// 开始监听 /// </summary> public void Monitor() { while (StarMonitor) { RegNotifyChangeKeyValue(_OpenIntPtr, false, REG_NOTIFY_CHANGE_NAME + REG_NOTIFY_CHANGE_ATTRIBUTES + REG_NOTIFY_CHANGE_LAST_SET + REG_NOTIFY_CHANGE_SECURITY, 0, false); GetUpdate(); } } /// <summary> /// 检查数据 /// </summary> private void GetUpdate() { string[] NewName = _OpenReg.GetValueNames(); //获取当前的名称 if (NewName.Length < _Date.Count) //如果当前少了说明是删除 { foreach (string Key in _Date.Keys) //循环刚开始的记录的名称 { bool _Del = true; for (int i = 0; i != NewName.Length; i++) //循环比较 { if (Key == NewName[i]) { _Del = false; break; } } if (_Del == true) { if (UpReg != null) UpReg(Key, _Date[Key], "", ""); //删除 GetOldRegData(); return; } } } for (int i = 0; i != NewName.Length; i++) { if (_Date[NewName[i]] == null) { if (UpReg != null) UpReg("", "", NewName[i], _OpenReg.GetValue(NewName[i])); //添加 GetOldRegData(); return; } else { if (_Date[NewName[i]].ToString() == _OpenReg.GetValue(NewName[i]).ToString()) continue; //修改 if (UpReg != null) UpReg(NewName[i], _Date[NewName[i]], NewName[i], _OpenReg.GetValue(NewName[i])); GetOldRegData(); return; } } } public delegate void UpdataReg(string OldText,object OldValue,string NewText,object NewValue); public event UpdataReg UpReg; }
评论列表
本站所提供的代码,版权归原作者所有,若有侵犯作者版权,请与我们联系,我们将立即删除或修改。谢谢!
本站所有代码发布及提供者。
试试其它关键字
监视注册表
WIN32
API
同语言下
.
文件IO 操作类库
.
Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,P
.
机器名和IP取得(IPV4 IPV6)
.
Tiff转换Bitmap
.
linqHelper
.
MadieHelper.cs
.
RegHelper.cs
.
如果关闭一个窗体后激活另一个窗体的事件或方法
.
创建日志通用类
.
串口辅助开发类
可能有用的
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
.
实现对图片上传的接收
.
判断用户输入的是否为IP地址
zgke
贡献的其它代码
(
46
)
.
让程序只保证一个进程的类
.
获取PictureBox的SizeMode为Zoom图形的大小
.
获取RICHTEXTBOX所有图形的位置和大小
.
实现系统热键盘注册的类.
.
操作CUR的类
.
读写 Photoshop PSD文件 操作类
.
获取系统鼠标指针
.
隐藏滚动条
.
实现BCD码
.
获取EXCEL所有表名
地图
本站
我们
服务
版权
联系
回馈
博客