从网上看了一篇《分享windows的秘密-外壳通知消息》的文章,感觉很不错,可是它是delphi的程序,和VB相差很大,API在VB中没有对应的声明,并且一些结构体在VB中没有现成的定义,所以很是研究了一番,优盘的插入、拔出,光盘的插入、取出都有了相应的通知,效果不错。
可以接收的消息如下:
SHCNE_ASSOCCHANGED 一个文件关联被改变了
SHCNE_ATTRIBUTES 一个项目或文件夹的属性被改变了
SHCNE_CREATE 文件夹的外壳成员被创建了
SHCNE_DELETE非文件夹的外壳成员被删除了
SHCNE_DRIVEADD 添加了一个驱动器
SHCNE_DRIVEADDGUI 通过外壳添加的驱动器
SHCNE_DRIVEREMOVED 一个驱动器被删除了
SHCNE_EXTENDED_EVENT 未被使用
SHCNE_FREESPACE 驱动器的自由空间数有了变化
SHCNE_MEDIAINSERTED 存储介质被插入到驱动器中
SHCNE_MEDIAREMOVED 存储介质从驱动器中被删除
SHCNE_MKDIR 一个目录被创建
SHCNE_NETSHARE 本地的目录被共享
SHCNE_NETUNSHARE 本地目录被取消共享
SHCNE_RENAMEFOLDER 文件夹名称被改变
SHCNE_RENAMEITEM 非文件的外壳对象的名称被改变
SHCNE_RMDIR 一个文件夹被删除
SHCNE_SERVERDISCONNECT 计算机被服务器断开
SHCNE_UPDATEDIR 一个文件夹中的内容被改变
SHCNE_UPDATEIMAGE 系统图像列表中的一个图像被改变
SHCNE_UPDATEITEM 一个非文件夹外壳对象的名称被改变
运行后的截图:
关键源码:
'*************************************************************************
'**函 数 名:WindowProc
'**输 入:ByVal hwnd(Long) -
'** :ByVal uMsg(Long) -
'** :ByVal wParam(Long) -
'** :ByVal lParam(Long) -
'**输 出:(Long) -
'**功能描述:子类函数
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2005年12月23日
'**修 改 人:
'**日 期:
'**版 本:V1.0
'*************************************************************************
Private Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'-------------------------------
Dim i As Long
If uMsg = WM_YFSYSMSG Then
For i = 0 To 20
If (lParam And lngFlag(i)) > 0 Then
frmSysmsg.lstMsg.AddItem Format(Now, "HH:MM:SS") & " " & strFlag(i)
End If
Next
Exit Function
End If
'-------------------------------
WindowProc = CallWindowProc(lngPreWinProc, hwnd, uMsg, wParam, lParam)
End Function
'*************************************************************************
'**函 数 名:ISubProc
'**输 入:hwnd(Long) - 窗口句柄
'**输 出:无
'**功能描述:
'**全局变量:
'**调用模块:安装子类
'**作 者:叶帆
'**日 期:2005-12-23 11:41:37
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Public Sub ISubProc(hwnd As Long)
'记录原本的Window Procedure的位址
lngPreWinProc = GetWindowLong(hwnd, GWL_WNDPROC)
Call SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
'*************************************************************************
'**函 数 名:UnISubProc
'**输 入:hwnd(Long) - 窗口句柄
'**输 出:无
'**功能描述:卸载子类
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2005-12-23 11:43:53
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Public Sub UnISubProc(hwnd As Long)
'取消Message的截取,而使之又只送往原来的Window Procedure
Call SetWindowLong(hwnd, GWL_WNDPROC, lngPreWinProc)
End Sub
'*************************************************************************
'**函 数 名:SysMsgRegister
'**输 入:无
'**输 出:无
'**功能描述:消息注册
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2005-12-23 13:18:02
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Public Sub SysMsgRegister(hwnd As Long)
Dim nr As NotifyRegister
lngFlag = Array(SHCNE_ASSOCCHANGED, _
SHCNE_ATTRIBUTES, _
SHCNE_CREATE, _
SHCNE_DELETE, _
SHCNE_DRIVEADD, _
SHCNE_DRIVEADDGUI, _
SHCNE_DRIVEREMOVED, _
SHCNE_EXTENDED_EVENT, _
SHCNE_FREESPACE, _
SHCNE_MEDIAINSERTED, _
SHCNE_MEDIAREMOVED, _
SHCNE_MKDIR, _
SHCNE_NETSHARE, _
SHCNE_NETUNSHARE, _
SHCNE_RENAMEFOLDER, _
SHCNE_RENAMEITEM, _
SHCNE_RMDIR, _
SHCNE_SERVERDISCONNECT, _
SHCNE_UPDATEDIR, _
SHCNE_UPDATEIMAGE, _
SHCNE_UPDATEITEM)
strFlag = Array("文件关联被改变", _
"文件夹属性被改变", _
"文件夹外壳成员被创建", _
"非文件夹外壳成员被删除", _
"添加了一个驱动器", _
"通过外壳添加的驱动器", _
"一个驱动器被删除了", _
"未使用", _
"驱动器自由空间发生变化", _
"存储介质插入驱动器", _
"存储介质被移除", _
"一个目录被创建", _
"本地目录被共享", _
"本地目录被取消共享", _
"文件夹名称被改变", _
"非文件的外壳对象名称被改变", _
"一个文件夹被删除", _
"计算机被服务器断开", _
"一个文件夹的内容被改变", _
"系统图像列表中的一个图像被改变", _
"一个非文件夹外壳对象的名称被改变")
lngHandle = SHChangeNotifyRegister(hwnd, SHCNF_ACCEPT_INTERRUPTS Or SHCNF_ACCEPT_NON_INTERRUPTS, SHCNE_ALLEVENTS, WM_YFSYSMSG, 1, nr)
If lngHandle > 0 Then
frmSysmsg.picFlag.BackColor = RGB(0, 200, 0)
Else
frmSysmsg.picFlag.BackColor = RGB(255, 0, 0)
End If
End Sub
'*************************************************************************
'**函 数 名:UnSysMsgRegister
'**输 入:无
'**输 出:无
'**功能描述:取消注册
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2005-12-23 13:19:06
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Public Sub UnSysMsgRegister()
If lngHandle > 0 Then
SHChangeNotifyDeregister lngHandle
End If
End Sub
在Windows XP / VB 6.0环境下测试成功。
源代码下载地址:http://www.bjjr.com.cn/YeFan/SourceCode/yfsysmsg.rar
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
相关推荐
本文将详细讲解如何获取和修改VB源程序,以及与之相关的网络网关设置。 VB源程序是使用VB编程语言编写的代码,它包含了控制应用程序逻辑和功能的指令。直接使用VB源程序意味着你可以查看、编辑和定制代码,以适应...
总结,通过VB源程序获取网卡物理地址涉及的关键技术点包括: - 使用WMI服务 - 连接WMI命名空间 - 执行WMI查询以获取网络适配器信息 - 访问并处理返回的适配器对象的属性 希望这个详细解释能够帮助你理解如何在VB...
VB编程源代码 94得到当前windows的版本号VB编程源代码 94得到当前windows的版本号VB编程源代码 94得到当前windows的版本号VB编程源代码 94得到当前windows的版本号VB编程源代码 94得到当前windows的版本号VB编程源...
VB编程源代码 89获取文件信息VB编程源代码 89获取文件信息VB编程源代码 89获取文件信息VB编程源代码 89获取文件信息VB编程源代码 89获取文件信息VB编程源代码 89获取文件信息VB编程源代码 89获取文件信息VB编程源...
- **图形绘制**:如果源程序包含图形显示部分,需要熟悉VB的图形绘制API,如GDI+或Windows Forms控件,用于在窗口上绘制三角形。 - **算法实现**:深入理解Delaunay三角网的构建算法,如旋转翻转操作,以及如何在VB...
【标题】"学生管理信息系统vb源程序"是一个基于Visual Basic(VB)开发的学生信息管理系统的源代码项目,它结合了SQL Server 2000作为后台数据库进行数据存储和处理。这个系统通常用于教育机构,帮助管理员高效地...
VB.NET获取Windows 7操作系统信息,本程序获取的内容比较多,主要有:显示器分辨率、桌面文件夹路径、收藏夹路径、Application Data""路径"、Windows7当前登录的用户名、当前应用程序的路径、计算机IP和计算机全名、...
VB源程序代码
【S7200 VB源程序】是一种基于西门子S7-200系列PLC(可编程逻辑控制器)的编程方式,结合了Visual Basic(VB)编程语言的元素,用于实现对S7-200 PLC的控制逻辑。在工业自动化领域,这种结合使得非专业程序员也能更...
《深入解析:WinPE图形化安装VB源程序》 Windows Preinstallation Environment(WinPE)是微软提供的一种轻量级操作系统,常用于系统安装、维护、修复等任务。而在WinPE环境下进行VB(Visual Basic)源程序的图形化...
通过学习和分析"VB源程序",不仅可以提升编程技能,还能深入了解VB的特性,对于从事Windows桌面应用开发或进行二次开发工作非常有帮助。同时,实践编写和修改VB源代码也是巩固理论知识,提升编程能力的有效途径。
【标题】:“网址收集的VB源程序” 在编程领域,Visual Basic(VB)是一种流行的编程语言,由微软公司开发,适用于构建Windows桌面应用程序。本资源是利用VB编写的用于收集网址的源代码程序,它可以帮助用户管理和...
综上所述,"获取磁盘序列号程序"是一个利用VB6.0和Windows API来读取硬盘序列号的实用程序,对于了解系统编程和API调用有很好的学习价值。通过这样的项目,开发者可以提升自己的编程技能,同时更好地理解操作系统与...
VB编程源代码 66从 VB 应用程序中发送 ICQ 信息VB编程源代码 66从 VB 应用程序中发送 ICQ 信息VB编程源代码 66从 VB 应用程序中发送 ICQ 信息VB编程源代码 66从 VB 应用程序中发送 ICQ 信息VB编程源代码 66从 VB ...
内容索引:VB源码,系统相关,仿windows,服务 VB 代码写成的服务程序, VB写服务最主要的一个问题是线程的问题,论坛里已经有解决的办法了,不过还有一个问题. 在函数里的变量会变成公用变量,相对线程来说,钻研了...
在VB中获取所有操作系统版本信息是一项常见的任务,这有助于开发人员编写跨平台兼容的程序。以下是对这个主题的详细阐述: 一、VB获取本机当前操作系统的详细信息 1. 使用`My.Computer.Info`对象:VB.NET提供了一...
VB同过API函数获取当前系统的序列号 Win2000 WinXP 和 Win7均可用。
在VB下,一般要通过VC或者Delphi的强大功能,编写的DLL或者ocx控件,来读取硬盘的序列号。... 例子中,通过VB编写的源程序,获取硬盘的物理序列号。 程序在VB6.0+winxp下,测试SATA硬盘,顺利成功。
在VB6.0环境下,开发一个能够获取Windows版本信息的程序是一项常见的任务,这有助于开发者了解应用程序运行的环境,从而做出适应性的调整。本程序的核心是利用VB6.0的内置函数和对象来访问操作系统提供的API(应用...
关于用Combox 做的VB.net源程序