線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1516
推到 Plurk!
推到 Facebook!

監控多個資料夾檔案變動

答題得分者是:GrandRURU
blue
中階會員


發表:113
回覆:99
積分:52
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-02-22 16:13:01 IP:122.146.xxx.xxx 訂閱
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
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-02-22 17:38:55 IP:61.219.xxx.xxx 未訂閱
 已經有很好用的元件了

詳看:
http://delphi.ktop.com.tw/board.php?cid=30&fid=1498&tid=102113
系統時間:2017-10-21 12:50:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!