Hi,
ich möchte mit "_WinAPI_ShellChangeNotifyRegister" feststellen, ob ein Ordner existiert oder nicht.
C
#Region ;************ Includes ************
#include <WinAPISysWin.au3>
#include <WinAPIShellEx.au3>
#EndRegion ;************ Includes ************
#AutoIt3Wrapper_UseX64=Y ;32bit funktioniert / 64bit funktioniert nicht
Global $aTest[2] = ["C:\_test\", "C:\_test2\"]
DirCreate($aTest[0])
DirCreate($aTest[1])
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), $aTest, 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
EndFunc ;==>OnAutoItExit
Alles anzeigen
Mit #AutoIt3Wrapper_UseX64=N startet das Skript und registriert auch Änderungen, wenn der Ordner umbenannt wird.
Mit #AutoIt3Wrapper_UseX64=Y stürzt das Skript direkt ab.