Funktionreferenz


_WinAPI_ShellChangeNotifyRegister

Beschreibung anzeigen in

Registriert ein Fenster für den Empfang von Benachrichtigungen aus dem Dateisystem oder der Shell

#include <WinAPIShellEx.au3>
_WinAPI_ShellChangeNotifyRegister ( $hWnd, $iMsg, $iEvents, $iSources, $aPaths [, $bRecursive = False] )

Parameter

$hWnd Handle zu dem Fenster, das die Änderungs- oder Benachrichtigungsmeldungen empfängt.
$iMsg Nachricht, die in das Fensterverfahren eingetragen werden soll.
$iEvents Änderung der Benachrichtigungsereignisse, für die eine Benachrichtigung erfolgen soll. Dieser Parameter kann einer oder mehrere der $SHCNE_*-Werte sein.
$iSources Einer oder mehrere der folgenden Werte, die die Art der Ereignisse angeben, für die Benachrichtigungen empfangen werden sollen.
$SHCNRF_INTERRUPTLEVEL
$SHCNRF_SHELLLEVEL
$SHCNRF_RECURSIVEINTERRUPT
$SHCNRF_NEWDELIVERY
$aPaths Einzelner Pfad oder Array von Pfaden, für die Benachrichtigungen empfangen werden sollen. Diese Namen sollten vollqualifizierte Pfade sein, um unerwartete Ergebnisse zu vermeiden.
$bRecursive [optional] Gibt an, ob Benachrichtigungen für untergeordnete Pfade im Parameter $aPaths veröffentlicht werden sollen; gültige Werte:
    True - Die Benachrichtigungen würden von den Kindern des Ordners kommen.
    False - Die Benachrichtigungen kommen nur aus dem angegebenen Ordner (Standard).

Rückgabewert

Erfolg: Die Registrierungs-ID.
Fehler: 0 und setzt das @error-Flag auf ungleich 0.

Bemerkungen

Wenn ein Änderungsbenachrichtigungsereignis ausgelöst wird, wird die durch $iMsg angegebene Nachricht an das durch den Parameter $hWnd angegebene Fenster übermittelt.

Aus Leistungsgründen können mehrere Benachrichtigungen in einer einzigen Benachrichtigung zusammengefasst werden.
Wenn beispielsweise eine große Anzahl von $SHCNE_UPDATEITEM-Meldungen für Dateien im selben Ordner erzeugt wird, können diese in einer einzigen $SHCNE_UPDATEDIR-Meldung zusammengefasst werden.

Verwandte Funktionen

_WinAPI_ShellChangeNotifyDeregister

Siehe auch

Suche nach SHChangeNotifyRegister in der MSDN Bibliothek.

Beispiel

#include <MsgBoxConstants.au3>
#include <WinAPIShellEx.au3>
#include <WinAPISysWin.au3>

Opt('TrayAutoPause', 0)

Global Const $g_sPath = @TempDir & '\~TEST~'

DirCreate($g_sPath)
If Not FileExists($g_sPath) Then
    MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), 'Fehler', 'Der Ordner konnte nicht erstellt werden.')
    Exit
EndIf

OnAutoItExitRegister('OnAutoItExit')

Local $hWnd = GUICreate('')
Local $iMsg = _WinAPI_RegisterWindowMessage('SHELLCHANGENOTIFY')
GUIRegisterMsg($iMsg, 'WM_SHELLCHANGENOTIFY')
Global $g_iID = _WinAPI_ShellChangeNotifyRegister($hWnd, $iMsg, $SHCNE_ALLEVENTS, BitOR($SHCNRF_INTERRUPTLEVEL, $SHCNRF_SHELLLEVEL, $SHCNRF_RECURSIVEINTERRUPT), $g_sPath, 1)
If @error Then
    MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), 'Fehler', 'Das Fenster wurde nicht registriert.')
    Exit
EndIf

While 1
    Sleep(1000)
WEnd

Func WM_SHELLCHANGENOTIFY($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg

    Local $sPath = _WinAPI_ShellGetPathFromIDList(DllStructGetData(DllStructCreate('dword Item1; dword Item2', $wParam), 'Item1'))
    If $sPath Then
        ConsoleWrite('Event: 0x' & Hex($lParam) & ' | Pfad: ' & $sPath & @CRLF)
    Else
        ConsoleWrite('Event: 0x' & Hex($lParam) & @CRLF)
    EndIf
EndFunc   ;==>WM_SHELLCHANGENOTIFY

Func OnAutoItExit()
    If $g_iID Then
        _WinAPI_ShellChangeNotifyDeregister($g_iID)
    EndIf
    DirRemove($g_sPath)
EndFunc   ;==>OnAutoItExit