通知调用者改变指定注册表键的属性或内容
#Include <WinAPIEx.au3>
_WinAPI_RegNotifyChangeKeyValue ( $hKey, $iFilter [, $fSubtree [, $fAsync [, $hEvent]]] )
$hKey | 打开的注册表键的句柄. 改建必须以KEY_NOTIFY访问权限打开. 句柄由_WinAPI_RegCreateKey()或_WinAPI_RegOpenKey()函数返回. 可为下列预定义键之一. $HKEY_CLASSES_ROOT $HKEY_CURRENT_CONFIG $HKEY_CURRENT_USER $HKEY_LOCAL_MACHINE $HKEY_USERS |
$iFilter | 描述要报告的变化. 可为下列值之一. $REG_NOTIFY_CHANGE_NAME $REG_NOTIFY_CHANGE_ATTRIBUTES $REG_NOTIFY_CHANGE_LAST_SET $REG_NOTIFY_CHANGE_SECURITY |
$fSubtree | [可选参数]指定是否报告指定键的子建的变化, 可用值: 1 - 报告指定键及其所有子键的变化. 0 - 只报告指定键的变化. (默认) |
$fAsync | [可选参数]指定是否立即返回, 可用值: 1 - 函数立即返回并报告标志指定事件的变化. 0 - 直到改变发生函数才返回. (默认) |
$hEvent | [可选参数]事件句柄. 如果$fAsync参数为TRUE, 函数立即返回并通过标识该事件报告变化, 否则忽略该参数. |
成功: | 返回 1 |
失败: | 返回 0设置@error 非0, @extended标记可包含系统错误代码 |
在MSDN中搜索
#Include <APIConstants.au3>
#Include <WinAPIEx.au3>
Opt('MustDeclareVars', 1)
Opt('TrayAutoPause', 0)
Global $hKey, $hEvent
$hKey = _WinAPI_RegOpenKey($HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Run', $KEY_NOTIFY)
If @error Then
MsgBox(16, @extended, _WinAPI_GetErrorMessage(@extended))
Exit
EndIf
$hEvent = _WinAPI_CreateEvent()
If Not _WinAPI_RegNotifyChangeKeyValue($hKey, $REG_NOTIFY_CHANGE_LAST_SET, 0, 1, $hEvent) Then
Exit
EndIf
While 1
If Not _WinAPI_WaitForSingleObject($hEvent, 0) Then
Run(@AutoItExe & ' /AutoIt3ExecuteLine "MsgBox(48, ''Registry'', ''The registry hive has been modified.'' & @CR & @CR & ''HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run'', 5)"')
If Not _WinAPI_RegNotifyChangeKeyValue($hKey, $REG_NOTIFY_CHANGE_LAST_SET, 0, 1, $hEvent) Then
ExitLoop
EndIf
EndIf
Sleep(100)
WEnd
_WinAPI_CloseHandle($hEvent)
_WinAPI_RegCloseKey($hKey)