代码

如何在VB例程中接收自定义消息 
  您可以用API函数SetWindowLong指定处理消息的窗口过程(window procedure)为自定义的函数WindowProc,捕获消息ID为WM_USER+1的自定义消息或系统消息。并且,为了保证窗口能正确的响应消息,需要保存原来默认的窗口过程并在自定义函数WindowProc中调用。如下例,在按钮事件中发送自定义消息,WindowProc捕获了窗口大小变化的系统定义消息和用户自定义的消息并显示用户自定义的消息参数wParam:
  在Moduel中加入以下代码,
  Option Explicit
  Private Const GWL_WNDPROC = -4
  Public Const GWL_USERDATA = (-21)
  Public Const WM_SIZE = &H5
  Public Const WM_USER = &H400
  Private Declare Function CallWindowProc Lib "user32" Alias _
  "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
  ByVal hwnd As Long, ByVal Msg As Long, _
  ByVal wParam As Long, ByVal lParam As Long) As Long 
  Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
  (ByVal hwnd As Long, ByVal nIndex As Long) As Long
  Private Declare Function SetWindowLong Lib "user32" Alias _
  "SetWindowLongA" (ByVal hwnd As Long, _
  ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  Public Function Hook(ByVal hwnd As Long) As Long
  Dim pOld As Long
  ‘指定自定义的窗口过程
  pOld = SetWindowLong(hwnd, GWL_WNDPROC, _
  AddressOf WindowProc) 
  ‘保存原来默认的窗口过程指针
  SetWindowLong hwnd, GWL_USERDATA, pOld
  Hook = pOld
  End Function
  Public Sub Unhook(ByVal hwnd As Long, ByVal lpWndProc As Long)
  Dim temp As Long
  注释:Cease subclassing.
  temp = SetWindowLong(hwnd, GWL_WNDPROC, lpWndProc)
  End Sub
  Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, _
  ByVal wParam As Long, ByVal lParam As Long) As Long
  If uMsg = WM_SIZE Then
  ‘处理WM_SIZE消息
  MsgBox "SIZE"
  End If
  If uMsg = WM_USER + 1 Then
  MsgBox wParam
  End If
  Dim lpPrevWndProc As Long
  ‘查询原来默认的窗口过程指针
  lpPrevWndProc = GetWindowLong(hw, GWL_USERDATA)
  ‘调用原来的窗口过程
  WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg,wParam, lParam)
  End Function
  在Form中加入以下代码:
  Dim wParam As Long
  Dim lParam As Long
  Dim lResult As Long
  Private Sub Command1_Click()
  wParam = 12345
  lResult = SendMessage(Me.hwnd, WM_USER + 1, wParam, lParam)
  End Sub
  Private Sub Form_Load()
  Me.Tag = Hook(Me.hwnd)
  End Sub
  Private Sub Form_Unload(Cancel As Integer)
  Unhook Me.hwnd, Me.Tag
  End Sub
  在VB中用自定义过程捕获并处理消息的详细信息和例子请参考:
  Q170570 HOWTO: Build a Windows Message Handler with AddressOf in Visual
  http://support.microsoft.com/support/kb/articles/q170/5/70.asp
  Q168795 HOWTO: Hook Into a Window注释:s Messages Using AddressOf
  http://support.microsoft.com/support/kb/articles/q168/7/95.asp

如何在VB例程中接收自定义消息相关推荐

  1. 如何在VB.NET中查询所有打印机端口名称,端口号ne

    文章目录 一.如何在VB.NET中查询所有打印机端口名称 二.使用步骤 1.引用 2.读入数据 总结 一.如何在VB.NET中查询所有打印机端口名称 本来想查询所有打印机的端口号 就是NE01 NE0 ...

  2. oracle在键盘上输入,如何在plsql developer中接收一个键盘输入

    如何在plsql developer中接收一个键盘输入 关注:131  答案:2  手机版 解决时间 2021-02-03 12:59 提问者断念劫难 2021-02-02 12:48 如何在plsq ...

  3. 如何在VB.NET中把excel文件转化为PDF文件

    文章目录 一.如何在VB.NET中把excel文件转化为PDF文件 二.使用步骤 一.如何在VB.NET中把excel文件转化为PDF文件 基于之前获取打印机端口号的教程 二.使用步骤 代码如下(示例 ...

  4. 如何在vb.net中取得两时间的毫秒差_科技品牌软文营销如何写出一篇爆文?

    随着互联网的发展,尤其是移动互联网的发展,让营销方式从传统的线下电视报纸广告逐渐转移到线上的软文营销.软文营销因为其快捷,方便,性价比高的特点受到了很多品牌的追捧.文章是软文营销的前提,如何写好一篇好 ...

  5. vb在服务器上新建文件夹,vb.net-如果不存在,如何在VB中创建文件夹?

    vb.net-如果不存在,如何在VB中创建文件夹? 我为自己编写了一个小小的下载应用程序,以便我可以轻松地从服务器上获取一组文件,然后将它们全部放入带有全新安装的Windows的新PC上,而无需实际运 ...

  6. autocad 如何摆正显示_如何在 VB 中连接 AutoCAD

    1.如何在 VB 中连接 AutoCAD. 启动 VB ,引用 AutoCAD 类型库.操作步骤:从"工程"菜单中选择"引用"选项,启动"引用&quo ...

  7. 如何在VB中实现ActiveX控件的IobjectSafety接口

    如何在VB中实现ActiveX控件的IobjectSafety接口 ------------------------------------------------------------------ ...

  8. python如何定义i_如何在Python中使用自定义消息引发相同的Exception?

    如何在Python中使用自定义消息引发相同的Exception? 我的代码中有这个ValueError块: try: do_something_that_might_raise_an_exceptio ...

  9. Word控件Spire.Doc 【Table】教程(17):如何在 C#、VB.NET 中删除 Word 表格中的行和列

    Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库.在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建.编辑.转换和打印 Micr ...

最新文章

  1. MyEclipse修改jsp模板文件
  2. [总结] 动态DP学习笔记
  3. FD33里面的销售值不正确应该怎么办?
  4. python3 案例分享--Jupyter Notebook Demo
  5. 推辞掉得不是你的工作,而是你的未来
  6. C++学习之路 | PTA乙级—— 1042 字符统计 (20 分)(精简)
  7. 符号实体(转义字符)
  8. 【图解漏洞】图解跨站请求伪造(CSRF)原理
  9. restful get不传参数404_flask-restful编写上传图片api
  10. 结构化分析方法是一种自下而上逐步求精的分析方法【软件项目管理】
  11. 模式识别与机器学习 第一章 绪论
  12. python apply函数不打印_Python Pandas dataframe shift在apply函数中不起作用
  13. CAD梦想画图中的“缩放命令”
  14. 迷你助手世界隐私条款
  15. 引流脚本有没有效果,引流脚本是什么
  16. error C251: illegal octal digit 错误提示
  17. 电商用户价值分析——基于RFM模型、KMeans聚类
  18. Win10 python双版本共存配置问题 Configuration file could not be loaded.
  19. 使用ssh正向连接、反向连接、做socks代理的方法
  20. 1.1.3 操作系统的发展与分类(手工操作阶段、批处理阶段、分时操作系统、实时操作系统、其它操作系统)

热门文章

  1. 汇编 过程 创建并测试 proc endp call ret uses
  2. 【Groovy】map 集合 ( map 集合操作符重载 | *. 展开操作符 | 代码示例 )
  3. 【Groovy】集合遍历 ( 调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 | =~ 运算符等价于 contains 函数 | 代码示例 )
  4. 【Android 命令行工具】Android 命令行工具简介 ( 官方文档 | SDK 命令行工具 | SDK 构建工具 | SDK 平台工具 | 模拟器工具 | Jetifier 工具 )
  5. 【Flutter】开发 Flutter 包和插件 ( 开发 Dart 插件包 | 发布 Dart 插件包 )
  6. 【Android 文件管理】分区存储 ( 创建与查询图片文件 )
  7. Oracle分析函数FIRST_VALUE、LAST_VALUE
  8. MySQL 5.7 create VIEW or FUNCTION or PROCEDURE
  9. react复习总结(1)--react组件开发基础
  10. Python有趣现象(不定时更新)