監控多個資料夾檔案變動 |
答題得分者是:GrandRURU
|
blue
中階會員 發表:170 回覆:136 積分:81 註冊:2002-04-15 發送簡訊給我 |
Hi,各位先進大家好:
小弟想監控多個資料夾的檔變動, 有找到 VB 的範例(如後), 改成 Delphi entry 使用陣列卻會發生錯誤, 不知各位先進是否有實作過? 謝謝! 假如只想監控一個目錄:假設為c:\abc dim pidl as long dim pidl as long pidl = getPIDL("c:\abc") pidl = getPIDL("c:\abc") dim entry as SHChangeNotifyEntry '当然要使用这样的结构体,你必须先在VB中声明这样一个结构体一些公开函数所使用的结构直接用VB自带的API查看器就可以得到其结构的VB声明。 dim entry as SHChangeNotifyEntry '當然要使用這樣的結構體,你必須先在VB中聲明這樣一個結構體一些公開函數所使用的結構直接用VB自帶的API查看器就可以得到其結構的VB聲明。 但SHChangeNotifyRegister是属于win 2000版本后才公开的函数。但SHChangeNotifyRegister是屬於win 2000版本後才公開的函數。 在VB6出来时,还属于非公开函数。在VB6出來時,還屬於非公開函數。 所以无法使用API查看器查看其VB声明。所以無法使用API查看器查看其VB聲明。 必须自已转化。必須自已轉化。 转化很简单。轉化很簡單。 在此不作介绍在此不作介紹 entry.pidl = pidl entry.pidl = pidl entry.fRecursive = true //如果你不想监控子目录就设为false entry.fRecursive = true //如果你不想監控子目錄就設為false SHChangeNotifyRegister(hWnd, _ SHChangeNotifyRegister(hWnd, _ SHCNF_TYPE Or SHCNF_IDLIST, _ SHCNF_TYPE Or SHCNF_IDLIST, _ SHCNE_ALLEVENTS Or SHCNE_INTERRUPT, _ SHCNE_ALLEVENTS Or SHCNE_INTERRUPT, _ WM_SHNOTIFY, 1, entry) WM_SHNOTIFY, 1, entry) 假如想监控两个或者更多。假如想監控兩個或者更多。 只须稍作变动只須稍作變動 dim pidl as Long ,pidl1 as Long dim pidl as Long ,pidl1 as Long pidl = getPIDL("c:\abc") pidl = getPIDL("c:\abc") pidl1= getPIDL("c:\bcd") pidl1= getPIDL("c:\bcd") dim entry(2) as SHChangeNotifyEntry dim entry(2) as SHChangeNotifyEntry entry(0).pidl = pidl entry(0).pidl = pidl entry(0).fRecursive = true //如果你不想监控子目录就设为false entry(0).fRecursive = true //如果你不想監控子目錄就設為false entry(1).pidl = pidl1 entry(1).pidl = pidl1 entry(1).fRecursive = true //如果你不想监控子目录就设为false entry(1).fRecursive = true //如果你不想監控子目錄就設為false SHChangeNotifyRegister(hWnd, _ SHChangeNotifyRegister(hWnd, _ SHCNF_TYPE Or SHCNF_IDLIST, _ SHCNF_TYPE Or SHCNF_IDLIST, _ SHCNE_ALLEVENTS Or SHCNE_INTERRUPT, _ SHCNE_ALLEVENTS Or SHCNE_INTERRUPT, _ WM_SHNOTIFY, 2, entry(0)) WM_SHNOTIFY, 2, entry(0)) 上面的hWnd。上面的hWnd。 很好获得在VB里任何一个窗体类里用Me.hWnd 就可以了通过上面的方法,我们就可以实现当c:\abc c:\bcd里发生改变的时候就会将一个WM_SHNOTIFY的消息发送到hWnd这个窗体的消息队列里。很好獲得在VB裡任何一個窗體類裡用Me.hWnd 就可以了通過上面的方法,我們就可以實現當c:\abc c:\bcd裡發生改變的時候就會將一個WM_SHNOTIFY的消息發送到hWnd這個窗體的消息隊列裡。 当然通过第三个参数可以设定捕获事件的范围,因为我们这里设为SHCNE_ALLEVENTS Or SHCNE_INTERRUPT當然通過第三個參數可以設定捕獲事件的範圍,因為我們這裡設為SHCNE_ALLEVENTS Or SHCNE_INTERRUPT 所以可以捕获所有事件。所以可以捕獲所有事件。 |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |