`
阿尔萨斯
  • 浏览: 4411377 次
社区版块
存档分类
最新评论

获取Windows 外壳信息通知(VB源程序)

 
阅读更多

从网上看了一篇《分享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源程序意味着你可以查看、编辑和定制代码,以适应...

    获取网卡物理地址的VB源程序

    总结,通过VB源程序获取网卡物理地址涉及的关键技术点包括: - 使用WMI服务 - 连接WMI命名空间 - 执行WMI查询以获取网络适配器信息 - 访问并处理返回的适配器对象的属性 希望这个详细解释能够帮助你理解如何在VB...

    VB编程源代码 94得到当前windows的版本号

    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编程源代码 89获取文件信息VB编程源...

    三角网的VB源程序 三角网的VB源程序

    - **图形绘制**:如果源程序包含图形显示部分,需要熟悉VB的图形绘制API,如GDI+或Windows Forms控件,用于在窗口上绘制三角形。 - **算法实现**:深入理解Delaunay三角网的构建算法,如旋转翻转操作,以及如何在VB...

    学生管理信息系统vb源程序

    【标题】"学生管理信息系统vb源程序"是一个基于Visual Basic(VB)开发的学生信息管理系统的源代码项目,它结合了SQL Server 2000作为后台数据库进行数据存储和处理。这个系统通常用于教育机构,帮助管理员高效地...

    VB.NET获取Windows 7操作系统信息.rar

    VB.NET获取Windows 7操作系统信息,本程序获取的内容比较多,主要有:显示器分辨率、桌面文件夹路径、收藏夹路径、Application Data""路径"、Windows7当前登录的用户名、当前应用程序的路径、计算机IP和计算机全名、...

    VB源程序代码

    VB源程序代码

    S7200 VB源程序

    【S7200 VB源程序】是一种基于西门子S7-200系列PLC(可编程逻辑控制器)的编程方式,结合了Visual Basic(VB)编程语言的元素,用于实现对S7-200 PLC的控制逻辑。在工业自动化领域,这种结合使得非专业程序员也能更...

    winpe图形化安装VB源程序

    《深入解析:WinPE图形化安装VB源程序》 Windows Preinstallation Environment(WinPE)是微软提供的一种轻量级操作系统,常用于系统安装、维护、修复等任务。而在WinPE环境下进行VB(Visual Basic)源程序的图形化...

    VB 源程序

    通过学习和分析"VB源程序",不仅可以提升编程技能,还能深入了解VB的特性,对于从事Windows桌面应用开发或进行二次开发工作非常有帮助。同时,实践编写和修改VB源代码也是巩固理论知识,提升编程能力的有效途径。

    网址收集的VB源程序

    【标题】:“网址收集的VB源程序” 在编程领域,Visual Basic(VB)是一种流行的编程语言,由微软公司开发,适用于构建Windows桌面应用程序。本资源是利用VB编写的用于收集网址的源代码程序,它可以帮助用户管理和...

    获取磁盘序列号程序(vb6.0程序)

    综上所述,"获取磁盘序列号程序"是一个利用VB6.0和Windows API来读取硬盘序列号的实用程序,对于了解系统编程和API调用有很好的学习价值。通过这样的项目,开发者可以提升自己的编程技能,同时更好地理解操作系统与...

    VB编程源代码 66从 VB 应用程序中发送 ICQ 信息

    VB编程源代码 66从 VB 应用程序中发送 ICQ 信息VB编程源代码 66从 VB 应用程序中发送 ICQ 信息VB编程源代码 66从 VB 应用程序中发送 ICQ 信息VB编程源代码 66从 VB 应用程序中发送 ICQ 信息VB编程源代码 66从 VB ...

    VB 源代码实现Windows 服务程序

    内容索引:VB源码,系统相关,仿windows,服务  VB 代码写成的服务程序, VB写服务最主要的一个问题是线程的问题,论坛里已经有解决的办法了,不过还有一个问题. 在函数里的变量会变成公用变量,相对线程来说,钻研了...

    VB获取所有操作系统版本信息

    在VB中获取所有操作系统版本信息是一项常见的任务,这有助于开发人员编写跨平台兼容的程序。以下是对这个主题的详细阐述: 一、VB获取本机当前操作系统的详细信息 1. 使用`My.Computer.Info`对象:VB.NET提供了一...

    VB 获取Windows安装序列号

    VB同过API函数获取当前系统的序列号 Win2000 WinXP 和 Win7均可用。

    VB源程序获取硬盘物理序列号

    在VB下,一般要通过VC或者Delphi的强大功能,编写的DLL或者ocx控件,来读取硬盘的序列号。... 例子中,通过VB编写的源程序,获取硬盘的物理序列号。 程序在VB6.0+winxp下,测试SATA硬盘,顺利成功。

    获得Windows版本信息程序(vb6.0代码编写)

    在VB6.0环境下,开发一个能够获取Windows版本信息的程序是一项常见的任务,这有助于开发者了解应用程序运行的环境,从而做出适应性的调整。本程序的核心是利用VB6.0的内置函数和对象来访问操作系统提供的API(应用...

    VB.net源程序

    关于用Combox 做的VB.net源程序

Global site tag (gtag.js) - Google Analytics