`
Par2: Monitor folder for changes 2012-03-15 -- Bjarne Havnen waitforsingleobject(unsigned,long),raw,long,pascal,name('waitforsingleobject'),proc WaitForMultipleObjects(long,long,long,long),raw,long,pascal,proc FindFirstChangeNotification(*cstring, bool,long),raw,unsigned,pascal,name('FindFirstChangeNotificationA') FindNextChangeNotification(unsigned),raw,bool,pascal,name('FindNextChangeNotification'),proc FindCloseChangeNotification(unsigned),raw,bool,pascal,name('FindCloseChangeNotification'),proc I start a procedure on a separate thread. Then I call the below method which is wrapped up in a class. When I change happens, I call a TakeChange method which just use regular DIRECTORY to get content and process it. I've made some slight modifications which should enable you to test it, to get an idea... Call as WaitChange(yourdirectory,,FILE_NOTIFY_CHANGE_FILE_NAME) The constants are defined in svapi.inc WaitChange PROCEDURE (string pDir,Byte subdir=false,Long FILE_NOTIFY_CHANGE) ! Declare Procedure Notifhandle long Autoreset Byte waitdir cstring(file:Maxfilepath) Invalid_handle_Value equate(-1) CODE waitdir = clip(pdir) NotifHandle=findFirstchangeNotification(waitdir,subdir,FILE_NOTIFY_CHANGE) If NotifHandle = INvalid_Handle_value Return End Loop Autoreset = False !if waitstruct.notifhandle has becomes signaled then send a message case waitForMultipleObjects(1,address(notifhandle),0,10000) Of Wait_object_0 if Message('change happened','change',,button:ok+button:cancel)=Button:Cancel Break Else Autoreset = true end Of WAIT_TIMEOUT if Message('timeout happened','change',,button:ok+button:cancel)=Button:Cancel Break Else autoreset = true End end If AutoReset FindNextchangeNotification(notifhandle) Cycle End Break end !sleep again if reset FindCloseChangeNotification(NotifHandle) Printed November 21, 2024, 7:12 am This article has been viewed/printed 35244 times. |