标题: [注册表类] [已解决]批处理监视注册表项 [打印本页]
作者: wh1234567 时间: 2012-6-3 19:52 标题: [已解决]批处理监视注册表项
本帖最后由 wh1234567 于 2012-6-16 14:44 编辑
当监视某个注册表项名称数值为29时就执行我的命令,如果监视数值不是29就不执行命令,如何写?
例如
注册表项"HKEY_LOCAL_MACHINE\333" 里右边的名称"444" 里的数值29
我的命令放在下面
作者: gawk 时间: 2012-6-4 08:55
http://www.bathome.net/thread-3747-1-1.html
作者: wh1234567 时间: 2012-6-4 11:10
这个看不懂啊
作者: tz_being 时间: 2012-6-4 13:16
别整HKLM\333,那个地方建立不了新项,就整HKLM\Software\333吧。- for /f "skip=4 tokens=1,2,*" %%i in ('reg query "HKLM\Software\333" /v 444') do set Ver=%%k
- if not %Ver%==29 goto :eof
- ::你的命令
- echo OK!Ver is 29.
- pause
复制代码
作者: gawk 时间: 2012-6-4 13:39
回复 3# wh1234567
边看边试,就懂了。
作者: powerbat 时间: 2012-6-4 13:50
你的目的是监视还是查询?
作者: wh1234567 时间: 2012-6-4 15:17
本帖最后由 wh1234567 于 2012-6-4 15:19 编辑
回复 4# tz_being
不行,闪了下就没了
另外说下,不是建立新项,而是监视那里的数值29
作者: wh1234567 时间: 2012-6-4 15:17
回复 6# powerbat
是监视
作者: powerbat 时间: 2012-6-4 16:24
回复 8# wh1234567
vbs- Hive = "HKEY_LOCAL_MACHINE"
- KeyPath = "Software\333"
- ValueName = "444"
-
- Set ws = CreateObject("WScript.Shell")
- Set Sink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")
- Set objWMIServices = GetObject("winmgmts:" & _
- "{impersonationLevel=impersonate}!\\.\root\default")
- objWMIServices.ExecNotificationQueryAsync Sink, _
- "Select * from RegistryValueChangeEvent Where " & _
- "Hive = '"&Hive&"' and " & _
- "KeyPath = '"&Replace(KeyPath,"\","\\")&"' and " & _
- "ValueName = '"&ValueName&"'"
- WScript.Echo "Listening for Registry Change Events..." & vbCrLf
- Do : WScript.Sleep 1000 : Loop
-
- Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
- Value = ws.RegRead(Hive&"\"&KeyPath&"\"&ValueName)
- 'WScript.Echo Value
- if CStr(Value)="29" then ws.Run "a.bat",0
- End Sub
复制代码
作者: tz_being 时间: 2012-6-4 17:48
回复 tz_being
不行,闪了下就没了
另外说下,不是建立新项,而是监视那里的数值29
wh1234567 发表于 2012-6-4 15:17
你注册表的这个地方HKLM\Software\333没有数值,当然自动退出了;如果有数值29就运行你的命令了
作者: wh1234567 时间: 2012-6-4 19:08 标题: ,
本帖最后由 wh1234567 于 2012-6-5 23:42 编辑
回复 10# tz_being
有数值的,数值就是29也退出了不能执行a.bat
作者: wh1234567 时间: 2012-6-4 19:11
本帖最后由 wh1234567 于 2012-6-4 19:18 编辑
回复 9# powerbat
我的命令放到哪,提示是英文看不懂啊
我的命令是a.bat这个吗?是代码不行还是我不会使用
作者: wh1234567 时间: 2012-6-4 19:16
最好的办法是不是在进程里全自动监视?
作者: powerbat 时间: 2012-6-5 21:57
回复 12# wh1234567
对。a.bat可用其他程序代替。
作者: wh1234567 时间: 2012-6-5 23:41
能不能弄成在进程里全自动监视的那种?当监视到数值变化到29就自动执行a.bat,不是运行一次监视一次,而是运行后就在进程里全自动监视
作者: powerbat 时间: 2012-6-6 00:09
回复 15# wh1234567
这就是6楼问你的目的,9楼的代码正是运行后一直监视。
作者: wh1234567 时间: 2012-6-6 09:24
数值是29也不自动执行a.bat啊,咋回事?
作者: wh1234567 时间: 2012-6-6 09:29
Listening for Registry Change Events...
脚本: C:\Documents and Settings\Administrator\桌面\新建 文本文档 (2).vbs
行: 18
字符: 5
错误: 无法打开注册键值 "HKEY_LOCAL_MACHINE\333\444" 进行读取。
代码: 80070002
源: WshShell.RegRead
这个代码需修正,应该是"HKEY_LOCAL_MACHINE\333" 里右边的名称"444
而不是HKEY_LOCAL_MACHINE\333\444
作者: powerbat 时间: 2012-6-6 10:27
回复 18# wh1234567
为了便于显示,作了少许修改,但不影响原有功能。
C:\Users\root\Desktop>type a.bat
@echo hello&pause
C:\Users\root\Desktop>type a.vbs
...
Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
Value = ws.RegRead(Hive&"\"&KeyPath&"\"&ValueName)
WScript.Echo "Registry Value Changed: " & Value
if CStr(Value)="29" then ws.Run "a.bat" ',0 '后面加0表示隐藏窗口运行
End Sub
C:\Users\root\Desktop>start /b cscript C:\Users\root\Desktop\a.vbs
Listening for Registry Change Events...
C:\Users\root\Desktop>reg add hklm\Software\333 /v 444 /d 28 /f
操作成功完成。
Registry Value Changed: 28
C:\Users\root\Desktop>reg add hklm\Software\333 /v 444 /d 29 /f
操作成功完成。
Registry Value Changed: 29
C:\Users\root\Desktop>
vbs运行a.bat弹出了一个窗口:
hello
请按任意键继续. . .
作者: wh1234567 时间: 2012-6-6 13:02
系统找不到指定的路径。
hello
请按任意键继续. . .
作者: powerbat 时间: 2012-6-6 13:22
回复 20# wh1234567
你想说什么呢?
作者: wh1234567 时间: 2012-6-6 13:31
回复 21# powerbat
不管用,没效果
作者: powerbat 时间: 2012-6-6 13:35
回复 22# wh1234567
那你的
hello
请按任意键继续. .
是怎么来的呢?
和你们交流真是累死了。。。
作者: wh1234567 时间: 2012-6-6 13:57
hello
请按任意键继续. .
按任意键后就自动退出了,进程里也看不到,注册表里相应的29也没见变化,我的a.bat是处理注册表项的,但没见自动执行a.bat
我的a.bat和你刚才这个批处理是在相同目录下的
作者: wh1234567 时间: 2012-6-6 13:58
是不是刚才你这个代码不完整啊?
作者: powerbat 时间: 2012-6-6 14:05
回复 25# wh1234567
你把19楼的内容好好看一遍,对比一下你是哪里写的有问题。
作者: wh1234567 时间: 2012-6-6 16:37
我就是复制的你这个代码啊,
代码里... 这个是什么意思?
作者: powerbat 时间: 2012-6-6 16:44
19楼引用的内容是在cmd中手动执行命令进行演示的过程。
...是英文省略号,表示省略9楼代码的相同部分以免浪费,还特意用蓝色区分与9楼代码不同的地方。浅蓝色是vbs的执行结果。
作者: wh1234567 时间: 2012-6-6 16:48
C:\Users\root\Desktop
为什么指定路径,在当前路径不行吗
我的批处理只能自己创建个文件夹放进去?哎
作者: powerbat 时间: 2012-6-6 17:17
回复 29# wh1234567
省略路径当然也可以。
那是我的cmd初始目录不是C:\Users\root\Desktop,而在其他地方运行过那条命令,后来我切换到桌面,直接按↑↓方向键调出历史命令,懒得重新输入。
你的bat随便放在哪里都可以,只要在ws.Run那里填上正确的路径即可(相对路径也行)。
这个vbs的作用只是监视注册表和启动bat,你在bat里可以随便写,已经与这个vbs无关了。
作者: wh1234567 时间: 2012-6-6 17:42
本帖最后由 wh1234567 于 2012-6-6 17:47 编辑
C:\Users\root\Desktop>type a.bat
@echo hello&pause
C:\Users\root\Desktop>type a.vbs
...
Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
Value = ws.RegRead(Hive&"\"&KeyPath&"\"&ValueName)
WScript.Echo "Registry Value Changed: " & Value
if CStr(Value)="29" then ws.Run "a.bat" ',0 '后面加0表示隐藏窗口运行
End Sub
C:\Users\root\Desktop>start /b cscript C:\Users\root\Desktop\a.vbs
Listening for Registry Change Events...
C:\Users\root\Desktop>reg add hklm\Software\333 /v 444 /d 28 /f
操作成功完成。
Registry Value Changed: 28
C:\Users\root\Desktop>reg add hklm\Software\333 /v 444 /d 29 /f
操作成功完成。
Registry Value Changed: 29
C:\Users\root\Desktop>
vbs运行a.bat弹出了一个窗口:
hello
请按任意键继续. . .
你这个是vbs的还是bat的?感觉很乱,并且不能运行提示错误,你能不能整理下
作者: powerbat 时间: 2012-6-6 18:02
回复 31# wh1234567
28楼:“19楼引用的内容是在cmd中手动执行命令进行演示的过程。”同学你没睡醒吧?
作者: wh1234567 时间: 2012-6-7 00:54
脚本: C:\Documents and Settings\Administrator\桌面\新建 文本文档 (2).vbs
行: 18
字符: 5
错误: 无法打开注册键值 "HKEY_LOCAL_MACHINE\333\444" 进行读取。
代码: 80070002
源: WshShell.RegRead
这个代码需修正,应该是"HKEY_LOCAL_MACHINE\333" 里右边的名称"444
而不是HKEY_LOCAL_MACHINE\333\444
会出错的,另外,当第一次运行时注册表项数值正好是29的话就无法执行a.bat 了,
作者: wh1234567 时间: 2012-6-7 01:03
本帖最后由 wh1234567 于 2012-6-7 01:20 编辑
Value = ws.RegRead(Hive&"\"&KeyPath&"\"&ValueName)
会弹出错误的对话框,是不是需修正下这个代码?
另外,能不能弄成当第一次运行或在监视的过程中发现数值是大于29就自动执行a.bat,这样比较稳定一些,
作者: powerbat 时间: 2012-6-7 13:17
回复 33# wh1234567
19楼的代码已经演示了,完全正常,不知为何到你那里就有各种问题。
1、你的操作系统是什么?
2、你的用户权限够不够?
3、请帖出你的完整代码。
作者: wh1234567 时间: 2012-6-7 13:32
本帖最后由 wh1234567 于 2012-6-7 13:35 编辑
xp的,代码就是复制你的9楼的代码,19楼的我看不懂,没法测试成功
作者: powerbat 时间: 2012-6-7 14:26
本帖最后由 powerbat 于 2012-6-7 14:27 编辑
回复 36# wh1234567
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\Documents and Settings\Administrator>cd /d D:\
D:\>type a.vbs
Hive = "HKEY_LOCAL_MACHINE"
KeyPath = "Software\333"
ValueName = "444"
Set ws = CreateObject("WScript.Shell")
Set Sink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")
Set objWMIServices = GetObject("winmgmts:" & _
"{impersonationLevel=impersonate}!\\.\root\default")
objWMIServices.ExecNotificationQueryAsync Sink, _
"Select * from RegistryValueChangeEvent Where " & _
"Hive = '"&Hive&"' and " & _
"KeyPath = '"&Replace(KeyPath,"\","\\")&"' and " & _
"ValueName = '"&ValueName&"'"
WScript.Echo "Listening for Registry Change Events..." & vbCrLf
Do : WScript.Sleep 1000 : Loop
Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
Value = ws.RegRead(Hive&"\"&KeyPath&"\"&ValueName)
WScript.Echo "Registry Value Changed: " & Value
if CStr(Value)="29" then ws.Run "a.bat" ',0 '后面加0表示隐藏窗口运行
End Sub
D:\>type a.bat
@echo hello&pause
D:\>start /b cscript a.vbs
Listening for Registry Change Events...
D:\>reg add hklm\Software\333 /v 444 /d 28 /f
操作成功结束
Registry Value Changed: 28
D:\>reg add hklm\Software\333 /v 444 /d 29 /f
操作成功结束
Registry Value Changed: 29
==============================================================================
vbs自动运行a.bat弹出了一个窗口:
hello
请按任意键继续. . .
==============================================================================
D:\>reg add hklm\Software\333 /v 444 /d 27 /f
操作成功结束
Registry Value Changed: 27
D:\>reg add hklm\Software\333 /v 444 /d 29 /f
操作成功结束
Registry Value Changed: 29
==============================================================================
vbs自动运行a.bat弹出了一个窗口:
hello
请按任意键继续. . .
==============================================================================
D:\>
再看不懂你就不要学批处理了。。。
作者: wh1234567 时间: 2012-6-7 16:02
嗯,就是这个vbs代码吧
Hive = "HKEY_LOCAL_MACHINE"
KeyPath = "Software\333"
ValueName = "444"
Set ws = CreateObject("WScript.Shell")
Set Sink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")
Set objWMIServices = GetObject("winmgmts:" & _
"{impersonationLevel=impersonate}!\\.\root\default")
objWMIServices.ExecNotificationQueryAsync Sink, _
"Select * from RegistryValueChangeEvent Where " & _
"Hive = '"&Hive&"' and " & _
"KeyPath = '"&Replace(KeyPath,"\","\\")&"' and " & _
"ValueName = '"&ValueName&"'"
WScript.Echo "Listening for Registry Change Events..." & vbCrLf
Do : WScript.Sleep 1000 : Loop
Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
Value = ws.RegRead(Hive&"\"&KeyPath&"\"&ValueName)
WScript.Echo "Registry Value Changed: " & Value
if CStr(Value)="29" then ws.Run "a.bat" ',0 '后面加0表示隐藏窗口运行
End Sub
但是如何第一次运行这个vbs,当数值大于29时就好像无法执行a.bat 了,另外发现当数值由其他数变化到29时才会执行a.bat ,而且会弹出错误的窗口。甚至个别时候数值变化到29也无法执行a.bat
这2个问题还得您需要修正一下代码,弄成运行后监视到数值大于29时就全自动执行a.bat,和修正弹出错误的窗口
弹出错误的窗口的原因可能是
Hive = "HKEY_LOCAL_MACHINE"
KeyPath = "Software\333"
ValueName = "444"
....
Value = ws.RegRead(Hive&"\"&KeyPath&"\"&ValueName)
作者: wh1234567 时间: 2012-6-7 16:07
弹出错误窗口内容如下:
脚本: C:\Documents and Settings\Administrator\桌面\新建 文本文档 (2).vbs
行: 18
字符: 5
错误: 无法打开注册键值 "HKEY_LOCAL_MACHINE\333\444" 进行读取。
代码: 80070002
源: WshShell.RegRead
红色的这个显示不对吧?估计是代码的问题,识别错误了
作者: wh1234567 时间: 2012-6-7 16:10
本帖最后由 wh1234567 于 2012-6-7 16:22 编辑
是当监视到数值是大于29就自动执行a.bat,而不是数值变化到29才执行a.bat,呵呵呵,如果原数值或者是变化到的数值是例如20或32就无能为力了不能执行a.bat了吧?
并不是按照顺序由28变化到29才执行a.bat,而是不管原数值是多少,只要发现是29就自动执行a.bat
作者: powerbat 时间: 2012-6-7 16:26
脚本中什么读过 HKEY_LOCAL_MACHINE\333\444 ?不要胡乱构造!
打开一个cmd,用cscript运行vbs,方便调试,所有信息都会在cmd中显示,既方便查看又便于复制。
你1楼的提问并不是说“大于29”,而是“为29”,请准确描述自己的问题。
好几处都是这样,你自己都说不清楚,别人怎么帮你呢?
作者: wh1234567 时间: 2012-6-7 16:48
嗯,是的,如果第一次运行(原数值就是29就不能执行a.bat了,需修正)发现是29就自动执行a.bat,这样就比较完美了
Hive = "HKEY_LOCAL_MACHINE"
KeyPath = "Software\rdc"
ValueName = "444"
我把333改为rdc,444是数值,不应该跟到这个\后面吧.
当数值变化为29时在执行a.bat时就会弹出这个错误窗口,
作者: powerbat 时间: 2012-6-7 17:08
RegRead那个没问题,vbs与reg命令语法不一样。
你运行vbs后始终会报错吗?没有成功运行a.bat的情况出现?如果始终出错,可能是你的系统有问题。
如果只是偶尔出现“法打开注册键值进行读取”的错误,那可能是某个程序对注册表该位置进行了锁定或设置了权限,造成vbs无法读取。
作者: wh1234567 时间: 2012-6-7 17:09
是不是问题出在 Value = ws.RegRead(Hive&"\"&KeyPath&"\"&ValueName) 这里?
现在就是这2个问题需修正:
1.如果第一次运行(原数值正好就是29就不能执行a.bat了,需修正)发现是29就自动执行a.bat
2.弹出错误窗口
作者: powerbat 时间: 2012-6-7 17:16
请打开一个cmd,按37楼的步骤把那些红色的命令逐条运行一次,确认一下是不是你的系统有问题。
确定没问题了就一切好说,不然大家永远无法沟通。
作者: sz1121 时间: 2012-6-7 17:26
我是路过的……
作者: wh1234567 时间: 2012-6-7 17:29
本帖最后由 wh1234567 于 2012-6-7 17:34 编辑
刚才可能是我多操作了几次导致系统或这个批处理出现问题,现在我将进程全部删除后程序运行29就执行,
只是你37楼的type a.vbs这个我没创建,可能是a.bat吧?其他显示正常,现在只修正我刚说的那2个问题就估计完美了,很感谢您帮我帮到底,呵呵呵
vbs的
作者: powerbat 时间: 2012-6-7 17:59
回复 47# wh1234567
你为什么不按我说的来呢?没有a.vbs和a.bat你建一个不就行了,内容已经type出来了。
现在重点是为什么我测试没问题而你一搞就报错,把这个原因找到其他功能随便加。
作者: wh1234567 时间: 2012-6-7 18:24
本帖最后由 wh1234567 于 2012-6-7 18:28 编辑
a.bat这是我的批处理,a.vbs这个是vbs代码程序吧,没错,就修正那2个问题就行,我理解你说的意思了,呵呵呵
作者: powerbat 时间: 2012-6-7 18:29
回复 49# wh1234567
我怎么觉得你脑子还没转过弯来呢?
作者: wh1234567 时间: 2012-6-7 19:06
呵呵呵,测试能行,只是得修正那2个问题就行
作者: wh1234567 时间: 2012-6-8 11:40
在线等......
作者: powerbat 时间: 2012-6-8 12:08
你说按37楼的步骤测试能行,那为什么还会出现第2个问题“弹出错误窗口”?出现错误了就说明不可行,你为什么要说测试可行呢?
不知道该说你可爱呢还是天真。。。
作者: wh1234567 时间: 2012-6-8 19:52
本帖最后由 wh1234567 于 2012-6-8 19:56 编辑
打开一个cmd,按37楼的步骤把那些红色的命令逐条运行一次,确认没问题能正常执行,也不弹出错误窗口。
但是如果直接运行a.vbs的话当数值变化成29时就会弹出那个错误窗口,同时也会自动执行a.bat。
为什么?
作者: bluewing009 时间: 2012-6-8 22:51
我记得我写了一个例子,监控注册表的……………………如果你看那个有问题再问我。
作者: wh1234567 时间: 2012-6-8 23:31
本帖最后由 wh1234567 于 2012-6-9 00:07 编辑
回复 53# powerbat
不好意思,我找到错误的原因了,是因为自动执行a.bat,这个批处理将444删除了导致会弹出那个错误窗口
你修正下那个当第一次运行时如果原数值就是29的话无法执行a.bat的问题吧
另外,我想能不能将第一次运行时弹出的窗口和数值变化时弹出的窗口过3秒钟后自动关闭,不需要手动点击确定的那种,还有与其发现数值是29时执行a.bat还不如直接用vbs将数值29自动修改为20,你看行不行,那个a.bat就不需要了。
标题能不能显示为:注册表监视小工具
作者: forfiles 时间: 2012-6-9 08:59
回复 55# bluewing009
我表示看不懂。目测楼主更看不懂。
作者: zqz0012005 时间: 2012-6-9 13:28
不听老人言,吃亏在眼前!
此帖可以说是最长最无聊的帖子!
人家早就说了让你把代码帖出来,你偏不听,非说自己代码和别人一样,结果怎样?而且自己有什么需求、碰到什么问题都不描述清楚,靠别人像挤牙膏似的问一点你才说一点,把大家的耐心都耗尽了,最终没人愿意回答你的问题了。楼主应该好好学一下提问的方法。
提问的智慧 http://www.bathome.net/thread-4054-1-1.html
作者: wh1234567 时间: 2012-6-10 21:03
回复 53# powerbat
你好,辛苦您了,不知道你还能不能再按照56楼的更新下这个vbs 呢?
作者: powerbat 时间: 2012-6-10 22:00
- Hive = "HKEY_LOCAL_MACHINE"
- KeyPath = "Software\333"
- ValueName = "444"
-
- On Error Resume Next
- Set ws = CreateObject("WScript.Shell")
- SINK_OnObjectReady 0, 0
- Set Sink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")
- Set objWMIServices = GetObject("winmgmts:" & _
- "{impersonationLevel=impersonate}!\\.\root\default")
- objWMIServices.ExecNotificationQueryAsync Sink, _
- "Select * from RegistryValueChangeEvent Where " & _
- "Hive = '"&Hive&"' and " & _
- "KeyPath = '"&Replace(KeyPath,"\","\\")&"' and " & _
- "ValueName = '"&ValueName&"'"
- WScript.Echo "Listening for Registry Change Events..." & vbCrLf
- Do : WScript.Sleep 1000 : Loop
-
- Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
- Value = ws.RegRead(Hive&"\"&KeyPath&"\"&ValueName)
- 'WScript.Echo Value
- if CStr(Value)="29" then
- ws.Popup "注册表值变成了29", 3, "通知"
- ws.RegWrite Hive&"\"&KeyPath&"\"&ValueName, 20, "REG_DWORD"
- end if
- End Sub
复制代码
作者: wh1234567 时间: 2012-6-11 12:56
回复 60# powerbat
很感谢您,最后请求了
另外:
Hive = "HKEY_LOCAL_MACHINE"
KeyPath = "Software\333"
ValueName = "444"
shuzhi =29
gaiwei =20
这样的话
if CStr(Value)="29" then
ws.Popup "注册表值变成了29", 3, "通知"
ws.RegWrite Hive&"\"&KeyPath&"\"&ValueName, 20, "REG_DWORD"
这里该如何修改呢?
如果想同时这样监视2个数值的话,不知道如何添加代码?
最后的求助了实在不好意思,完美后我就关闭问题了
作者: powerbat 时间: 2012-6-11 13:39
另外一个数值的注册表路径是什么?
作者: wh1234567 时间: 2012-6-11 14:12
本帖最后由 wh1234567 于 2012-6-11 14:14 编辑
回复 62# powerbat
另外一个数值的注册表路径是:
Hive2 = "HKEY_LOCAL_MACHINE"
KeyPath2 = "Software\2012"
ValueName2 = "0610"
shuzhi2 =98(这里是指要监视的数值)
gaiwei2 =70(这里是指要修改为的数值)
作者: powerbat 时间: 2012-6-11 15:55
- Hive = "HKEY_LOCAL_MACHINE"
- KeyPath = "Software\333"
- ValueName = "444"
- shuzhi = 29
- gaiwei = 20
- Hive2 = "HKEY_LOCAL_MACHINE"
- KeyPath2 = "Software\2012"
- ValueName2 = "0610"
- shuzhi2 = 98
- gaiwei2 = 70
- strTitle = "注册表监视"
- nShowTime = 3
-
- WQL = "Select * from RegistryValueChangeEvent Where (" & _
- "Hive = '"&Hive&"' and " & _
- "KeyPath = '"&Replace(KeyPath,"\","\\")&"' and " & _
- "ValueName = '"&ValueName&"') OR (" & _
- "Hive = '"&Hive2&"' and " & _
- "KeyPath = '"&Replace(KeyPath2,"\","\\")&"' and " & _
- "ValueName = '"&ValueName2 & "') "
-
- Set ws = CreateObject("WScript.Shell")
- CheckReg ValueName
- CheckReg ValueName2
- Set Sink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")
- Set objWMIServices = GetObject("winmgmts:" & _
- "{impersonationLevel=impersonate}!\\.\root\default")
- objWMIServices.ExecNotificationQueryAsync Sink, WQL
- ws.Popup "Listening for Registry Change Events...", nShowTime, strTitle, 4096
- Do : WScript.Sleep 1000 : Loop
-
- Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
- 'WScript.Echo wmiObject.GetObjectText_()
- CheckReg wmiObject.ValueName
- End Sub
-
- Sub CheckReg(VName)
- On Error Resume Next
- RegFullPath = Hive & "\" & KeyPath & "\" & ValueName
- RegFullPath2 = Hive2 & "\" & KeyPath2 & "\" & ValueName2
- if VName=ValueName then
- Value = ws.RegRead(RegFullPath)
- if Err then
- ws.RegWrite RegFullPath, gaiwei, "REG_DWORD"
- Err.Clear
- end if
- if CStr(Value)=CStr(shuzhi) then
- ws.Popup RegFullPath & " 变成了 " & shuzhi, nShowTime, strTitle, 4096
- ws.RegWrite RegFullPath, gaiwei, "REG_DWORD"
- end if
- end if
- if VName=ValueName2 then
- Value = ws.RegRead(RegFullPath2)
- if Err then
- ws.RegWrite RegFullPath2, gaiwei2, "REG_DWORD"
- Err.Clear
- end if
- if CStr(Value)=CStr(shuzhi2) then
- ws.Popup RegFullPath2 & " 变成了 " & shuzhi2, nShowTime, strTitle, 4096
- ws.RegWrite RegFullPath2, gaiwei2, "REG_DWORD"
- end if
- end if
- End Sub
复制代码
作者: wh1234567 时间: 2012-6-11 18:14
完全搞定,谢谢powerbat
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |