Avertit l'appelant sur les modifications apportées aux attributs ou au contenu d'une clé de registre spécifiée
#include <WinAPIReg.au3>
_WinAPI_RegNotifyChangeKeyValue ( $hKey, $iFilter [, $bSubtree = False [, $bAsync = False [, $hEvent = 0]]] )
$hKey |
Handle de la clé de registre ouverte. La clé doit avoir été ouverte avec le droit d'accès KEY_NOTIFY. Ce handle est retourné par la fonction _WinAPI_RegCreateKey() ou _WinAPI_RegOpenKey(). Il peut également être l'une des clés prédéfinies suivantes: $HKEY_CLASSES_ROOT $HKEY_CURRENT_CONFIG $HKEY_CURRENT_USER $HKEY_LOCAL_MACHINE $HKEY_USERS |
$iFilter | Indique les changements qui doivent être signalés. Ce paramètre peut prendre une ou plusieurs des valeurs suivantes: $REG_NOTIFY_CHANGE_NAME $REG_NOTIFY_CHANGE_ATTRIBUTES $REG_NOTIFY_CHANGE_LAST_SET $REG_NOTIFY_CHANGE_SECURITY |
$bSubtree | [optionnel] Indique si le rapport change dans les sous-clés de la clé spécifiée, les valeurs possibles sont: True - La fonction signale les changements dans la clé spécifiée et toutes ses sous-clés. False - La fonction ne signale les changements que dans la clé spécifiée (par défaut). |
$bAsync | [optionnel] Indique si la fonction retourne immédiatement, les valeurs possibles sont: True - La fonction retourne immédiatement et signale les modifications en signalant l'événement spécifié. False - La fonction ne retourne pas jusqu'à ce qu'une modification ait eu lieu (par défaut). |
$hEvent | [optionnel] Handle de l'événement. Si le paramètre $fAsync est True, la fonction retourne immédiatement et les modifications sont signalées en signalant cet événement, sinon ce paramètre est ignoré (par défaut). |
Succès: | Retourne 1. |
Échec: | Retourne 0 et définit @error <> 0, @extended peut contenir le code d'erreur du système. |
Si la clé spécifiée est fermée, l'événement est signalé. Cela signifie que l'application ne doit pas dépendre du fait que la clé est ouverte en retournant d'une opération d'attente sur l'événement.
_WinAPI_RegCreateKey, _WinAPI_RegOpenKey
Consultez RegNotifyChangeKeyValue dans la librairie MSDN.
#include <APIRegConstants.au3> #include <MsgBoxConstants.au3> #include <WinAPIError.au3> #include <WinAPIHObj.au3> #include <WinAPIProc.au3> #include <WinAPIReg.au3> Opt('TrayAutoPause', 0) Local $hKey = _WinAPI_RegOpenKey($HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Run', $KEY_NOTIFY) If @error Then MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), @extended, _WinAPI_GetErrorMessage(@extended)) Exit EndIf Local $hEvent = _WinAPI_CreateEvent() If Not _WinAPI_RegNotifyChangeKeyValue($hKey, $REG_NOTIFY_CHANGE_LAST_SET, 0, 1, $hEvent) Then Exit EndIf Local $bStopLoop = False Do If Not _WinAPI_WaitForSingleObject($hEvent, 0) Then Run(@AutoItExe & '/AutoIt3ExecuteLine "MsgBox(4096, ''Registry'', ''La base de registre a été modifiée.'' & @CRLF & @CRLF & ''HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run'', 5)"') $bStopLoop = Not _WinAPI_RegNotifyChangeKeyValue($hKey, $REG_NOTIFY_CHANGE_LAST_SET, 0, 1, $hEvent) EndIf Sleep(100) Until $bStopLoop _WinAPI_CloseHandle($hEvent) _WinAPI_RegCloseKey($hKey)