不是没百度或GOO过,确实没找到满意的。找到一个WATCHDIR的源码,却只能监控到目录的变动,但找不到变动的是什么文件;
还找到API-GUIDE里的一个例子,同样只能捕捉到目录改变的事件,但无法知道是什么文件改变了,及改变了什么;
找到介绍较多的是(Windows未公开函数揭密--之三),据说用了微软的三个未公开函数的源码,那个倒好,能监控到所有事件,但却只对WINDOW有效;
此源码的主要问题是只能捕捉到WINDOWS目录下的文件变动,其核心代码如下:
m_pidlDesktop = GetPIDLFromFolderID(0, CSIDL_DESKTOP)
If m_pidlDesktop Then
ps.pidl = m_pidlDesktop
ps.bWatchSubFolders = True
'注册Windows监视,将获得的句柄保存到m_hSHNotify中
m_hSHNotify = SHChangeNotifyRegister(hWnd, SHCNF_TYPE Or SHCNF_IDLIST, _
SHCNE_ALLEVENTS Or SHCNE_INTERRUPT, _
WM_SHNOTIFY, 1, ps)
SHNotify_Register = CBool(m_hSHNotify)
Else
Call CoTaskMemFree(m_pidlDesktop)
End If重要的是: m_pidlDesktop = GetPIDLFromFolderID(0, CSIDL_DESKTOP)只能拿到桌面的PIDL,但一直找不到获得其它目录的PIDL的途径,如果能找到应该也能解决。请大家帮下忙。
还找到API-GUIDE里的一个例子,同样只能捕捉到目录改变的事件,但无法知道是什么文件改变了,及改变了什么;
找到介绍较多的是(Windows未公开函数揭密--之三),据说用了微软的三个未公开函数的源码,那个倒好,能监控到所有事件,但却只对WINDOW有效;
此源码的主要问题是只能捕捉到WINDOWS目录下的文件变动,其核心代码如下:
m_pidlDesktop = GetPIDLFromFolderID(0, CSIDL_DESKTOP)
If m_pidlDesktop Then
ps.pidl = m_pidlDesktop
ps.bWatchSubFolders = True
'注册Windows监视,将获得的句柄保存到m_hSHNotify中
m_hSHNotify = SHChangeNotifyRegister(hWnd, SHCNF_TYPE Or SHCNF_IDLIST, _
SHCNE_ALLEVENTS Or SHCNE_INTERRUPT, _
WM_SHNOTIFY, 1, ps)
SHNotify_Register = CBool(m_hSHNotify)
Else
Call CoTaskMemFree(m_pidlDesktop)
End If重要的是: m_pidlDesktop = GetPIDLFromFolderID(0, CSIDL_DESKTOP)只能拿到桌面的PIDL,但一直找不到获得其它目录的PIDL的途径,如果能找到应该也能解决。请大家帮下忙。
解决方案 »
- 求思路 exe支持自动化
- 请问哪位大侠有VB修改IP 标识 内部网络号 dns的源码 不用重启的
- textbox控件的问题!
- ryuginka(刘银华)请进
- 关于模式窗体
- sos!帮mm问的,Excel中数据格式转换的问题,高手快进来啊!
- 如何在picturebox上使用灰度输出imagelist的一个图标
- 如何在vb中打开已加密的ACCESS文件?
- 在form_load中写语句动态生成10个commandbutton,运行时我如何控制他们,用什么(索引??好象不行,我是新手)如下面:
- TAPI编程的菜鸟问题,高分相送,良机末失!!!!!!(大虾菜鸟都快来看看!这次只让我给这么多份,分不够下回再给!)
- vb4.0调用水晶报表3.0没有问题,升级到vb6.0调水晶报表4.6,出现莫名问题,各位帮帮忙
- 窗口最大化
Private Declare Function FindCloseChangeNotification Lib "kernel32.dll" (ByVal hChangeHandle As Long) As Long
Private Declare Function FindNextChangeNotification Lib "kernel32" (ByVal hChangeHandle As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
研究这几个API吧
http://members.aol.com/btmtz/vb
http://www.mvps.org/ccrp
google "VB Folder Watch" or "VB Folder Monitor" or "VB Dir Guard"
你那几个函数很多代码都有,但是它只能知道目录改变了,而不能知道受影响的文件是什么?To VBAdvisor(Sunlight):
目录监控的代码已成功,但是暂时不能得到其它目录的PIDL,所以不能用代码来指定要监控的目录,而使用弹出目录框选择目录的方式就能得到PIDL。
现在是求获得PIDL的代码了。
文件名称: SHChangeNotifications
2.对于一般Folder,用ILCreateFromPathW。Private Declare Function ILCreateFromPathW Lib "shell32" (ByVal pwszPath As Long) As Long
#If WIN32_IE >= &H500 Then
Private Declare Sub ILFree Lib "shell32" (ByVal pidl As Long)
#Esle
Private Declare Sub ILFree Lib "shell32" Alias "#155" (ByVal pidl As Long)
#End IfPrivate Function PathToPIDL(ByVal sPath As String) As Long
Dim lRet As Long
lRet = ILCreateFromPath(StrPtr(sPath))
If lRet = 0 Then
sPath = StrConv(sPath, VBUnicode)
lRet = ILCreateFromPath(sPath)
End If
PathToPIDL = lRet
End Function调用:
pidl = PathToPIDL(sPath)
ILFree pidl
pidl = 0不知我理解对不对。敬请参考。
CSIDL_DESKTOP = &H0 ' <desktop>
CSIDL_INTERNET = &H1 ' Internet Explorer (icon on desktop)
CSIDL_PROGRAMS = &H2 ' Start Menu\Programs
CSIDL_CONTROLS = &H3 ' My Computer\Control Panel
CSIDL_PRINTERS = &H4 ' My Computer\Printers
CSIDL_PERSONAL = &H5 ' My Documents
CSIDL_FAVORITES = &H6 ' <user name>\Favorites
CSIDL_STARTUP = &H7 ' Start Menu\Programs\Startup
CSIDL_RECENT = &H8 ' <user name>\Recent
CSIDL_SENDTO = &H9 ' <user name>\SendTo
CSIDL_BITBUCKET = &HA ' <desktop>\Recycle Bin
CSIDL_STARTMENU = &HB ' <user name>\Start Menu
CSIDL_MYDOCUMENTS = &HC ' logical "My Documents" desktop icon
CSIDL_MYMUSIC = &HD ' "My Music" folder
CSIDL_MYVIDEO = &HE ' "My Videos" folder
CSIDL_DESKTOPDIRECTORY = &H10 ' <user name>\Desktop
CSIDL_DRIVES = &H11 ' My Computer
CSIDL_NETWORK = &H12 ' Network Neighborhood (My Network Places)
CSIDL_NETHOOD = &H13 ' <user name>\nethood
CSIDL_FONTS = &H14 ' windows\fonts
CSIDL_TEMPLATES = &H15
CSIDL_COMMON_STARTMENU = &H16 ' All Users\Start Menu
CSIDL_COMMON_PROGRAMS = &H17 ' All Users\Start Menu\Programs
CSIDL_COMMON_STARTUP = &H18 ' All Users\Startup
CSIDL_COMMON_DESKTOPDIRECTORY = &H19 ' All Users\Desktop
CSIDL_APPDATA = &H1A ' <user name>\Application Data
CSIDL_PRINTHOOD = &H1B ' <user name>\PrintHood
CSIDL_LOCAL_APPDATA = &H1C ' <user name>\Local Settings\Applicaiton Data (non roaming)
CSIDL_ALTSTARTUP = &H1D ' non localized startup
CSIDL_COMMON_ALTSTARTUP = &H1E ' non localized common startup
CSIDL_COMMON_FAVORITES = &H1F
CSIDL_INTERNET_CACHE = &H20
CSIDL_COOKIES = &H21
CSIDL_HISTORY = &H22
CSIDL_COMMON_APPDATA = &H23 ' All Users\Application Data
CSIDL_WINDOWS = &H24 ' GetWindowsDirectory()
CSIDL_SYSTEM = &H25 ' GetSystemDirectory()
CSIDL_PROGRAM_FILES = &H26 ' C:\Program Files
CSIDL_MYPICTURES = &H27 ' C:\Program Files\My Pictures
CSIDL_PROFILE = &H28 ' USERPROFILE
CSIDL_SYSTEMX86 = &H29 ' x86 system directory on RISC
CSIDL_PROGRAM_FILESX86 = &H2A ' x86 C:\Program Files on RISC
CSIDL_PROGRAM_FILES_COMMON = &H2B ' C:\Program Files\Common
CSIDL_PROGRAM_FILES_COMMONX86 = &H2C ' x86 Program Files\Common on RISC
CSIDL_COMMON_TEMPLATES = &H2D ' All Users\Templates
CSIDL_COMMON_DOCUMENTS = &H2E ' All Users\Documents
CSIDL_COMMON_ADMINTOOLS = &H2F ' All Users\Start Menu\Programs\Administrative Tools
CSIDL_ADMINTOOLS = &H30 ' <user name>\Start Menu\Programs\Administrative Tools
CSIDL_CONNECTIONS = &H31 ' Network and Dial-up Connections
CSIDL_COMMON_MUSIC = &H35 ' All Users\My Music
CSIDL_COMMON_PICTURES = &H36 ' All Users\My Pictures
CSIDL_COMMON_VIDEO = &H37 ' All Users\My Video
CSIDL_RESOURCES = &H38 ' Resource Direcotry
CSIDL_RESOURCES_LOCALIZED = &H39 ' Localized Resource Direcotry
CSIDL_COMMON_OEM_LINKS = &H3A ' Links to All Users OEM specific apps
CSIDL_CDBURN_AREA = &H3B ' USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning
CSIDL_COMPUTERSNEARME = &H3D ' Computers Near Me (computered from Workgroup membership)
End EnumPublic Enum CSIDL_FOLDERPATH
SHGFP_TYPE_CURRENT = &H0 ' Return the folder's current path.
SHGFP_TYPE_DEFAULT = &H1 ' Return the folder's default path.
End Enum
CSIDL_DESKTOP = &H0 ' <desktop>
CSIDL_INTERNET = &H1 ' Internet Explorer (icon on desktop)
CSIDL_PROGRAMS = &H2 ' Start Menu\Programs
CSIDL_CONTROLS = &H3 ' My Computer\Control Panel
CSIDL_PRINTERS = &H4 ' My Computer\Printers
CSIDL_PERSONAL = &H5 ' My Documents
CSIDL_FAVORITES = &H6 ' <user name>\Favorites
CSIDL_STARTUP = &H7 ' Start Menu\Programs\Startup
CSIDL_RECENT = &H8 ' <user name>\Recent
CSIDL_SENDTO = &H9 ' <user name>\SendTo
CSIDL_BITBUCKET = &HA ' <desktop>\Recycle Bin
CSIDL_STARTMENU = &HB ' <user name>\Start Menu
CSIDL_MYDOCUMENTS = &HC ' logical "My Documents" desktop icon
CSIDL_MYMUSIC = &HD ' "My Music" folder
CSIDL_MYVIDEO = &HE ' "My Videos" folder
CSIDL_DESKTOPDIRECTORY = &H10 ' <user name>\Desktop
CSIDL_DRIVES = &H11 ' My Computer
CSIDL_NETWORK = &H12 ' Network Neighborhood (My Network Places)
CSIDL_NETHOOD = &H13 ' <user name>\nethood
CSIDL_FONTS = &H14 ' windows\fonts
CSIDL_TEMPLATES = &H15
CSIDL_COMMON_STARTMENU = &H16 ' All Users\Start Menu
CSIDL_COMMON_PROGRAMS = &H17 ' All Users\Start Menu\Programs
CSIDL_COMMON_STARTUP = &H18 ' All Users\Startup
CSIDL_COMMON_DESKTOPDIRECTORY = &H19 ' All Users\Desktop
CSIDL_APPDATA = &H1A ' <user name>\Application Data
CSIDL_PRINTHOOD = &H1B ' <user name>\PrintHood
CSIDL_LOCAL_APPDATA = &H1C ' <user name>\Local Settings\Applicaiton Data (non roaming)
CSIDL_ALTSTARTUP = &H1D ' non localized startup
CSIDL_COMMON_ALTSTARTUP = &H1E ' non localized common startup
CSIDL_COMMON_FAVORITES = &H1F
CSIDL_INTERNET_CACHE = &H20
CSIDL_COOKIES = &H21
CSIDL_HISTORY = &H22
CSIDL_COMMON_APPDATA = &H23 ' All Users\Application Data
CSIDL_WINDOWS = &H24 ' GetWindowsDirectory()
CSIDL_SYSTEM = &H25 ' GetSystemDirectory()
CSIDL_PROGRAM_FILES = &H26 ' C:\Program Files
CSIDL_MYPICTURES = &H27 ' C:\Program Files\My Pictures
CSIDL_PROFILE = &H28 ' USERPROFILE
CSIDL_SYSTEMX86 = &H29 ' x86 system directory on RISC
CSIDL_PROGRAM_FILESX86 = &H2A ' x86 C:\Program Files on RISC
CSIDL_PROGRAM_FILES_COMMON = &H2B ' C:\Program Files\Common
CSIDL_PROGRAM_FILES_COMMONX86 = &H2C ' x86 Program Files\Common on RISC
CSIDL_COMMON_TEMPLATES = &H2D ' All Users\Templates
CSIDL_COMMON_DOCUMENTS = &H2E ' All Users\Documents
CSIDL_COMMON_ADMINTOOLS = &H2F ' All Users\Start Menu\Programs\Administrative Tools
CSIDL_ADMINTOOLS = &H30 ' <user name>\Start Menu\Programs\Administrative Tools
CSIDL_CONNECTIONS = &H31 ' Network and Dial-up Connections
CSIDL_COMMON_MUSIC = &H35 ' All Users\My Music
CSIDL_COMMON_PICTURES = &H36 ' All Users\My Pictures
CSIDL_COMMON_VIDEO = &H37 ' All Users\My Video
CSIDL_RESOURCES = &H38 ' Resource Direcotry
CSIDL_RESOURCES_LOCALIZED = &H39 ' Localized Resource Direcotry
CSIDL_COMMON_OEM_LINKS = &H3A ' Links to All Users OEM specific apps
CSIDL_CDBURN_AREA = &H3B ' USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning
CSIDL_COMPUTERSNEARME = &H3D ' Computers Near Me (computered from Workgroup membership)
End EnumPublic Enum CSIDL_FOLDERPATH
SHGFP_TYPE_CURRENT = &H0 ' Return the folder's current path.
SHGFP_TYPE_DEFAULT = &H1 ' Return the folder's default path.
End Enum1.对于Special Folder,比较容易。直接用Call SHGetSpecialFolderLocation(0, CSIDL, lPIDL)。
2.对于一般Folder,用ILCreateFromPathW。Private Declare Function ILCreateFromPathW Lib "shell32" (ByVal pwszPath As Long) As Long
#If WIN32_IE >= &H500 Then
Private Declare Sub ILFree Lib "shell32" (ByVal pidl As Long)
#Esle
Private Declare Sub ILFree Lib "shell32" Alias "#155" (ByVal pidl As Long)
#End IfPrivate Function PathToPIDL(ByVal sPath As String) As Long
Dim lRet As LonglRet = ILCreateFromPath(StrPtr(sPath))
If lRet = 0 Then
sPath = StrConv(sPath, VBUnicode)
lRet = ILCreateFromPath(sPath)
End IfPathToPIDL = lRet
End Function调用:
pidl = PathToPIDL(sPath)
ILFree pidl
pidl = 0不知我理解对不对。敬请参考。
另外这只是做监控一方面
看来你想在监控上下功夫 给你个做监控图形的好网址: http://www.visual-graph.com