如何在VB中实现自定义消息的响应函数?

fupf88 2000-08-26 07:18:00
各位大侠,我最近在用VB做程序时需要实现另一个程序(用VC开发的)发消息,使之响应的难题,由于我对VB不太熟悉,不知如何在VB中自定义消息及其响应函数,请个位高手帮忙,谢谢了!
...全文
650 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Un1 2001-02-17
  • 打赏
  • 举报
回复
http://www.banasoft.com/DownLoad/BNHkLib.exe
pgfan 2000-11-27
  • 打赏
  • 举报
回复
可是怎样传递参数啊(比如字符串),我试了几次都不成功。
fupf88 2000-08-29
  • 打赏
  • 举报
回复
谢谢sixfooter:你的程序稍稍有些遗漏,
Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_USER+100 Then '在这里处理你的消息(嘿!!!!别看花眼了,向这看!!!!!!!)
myfunction()
else
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
end if
End Function
这样实现的很好!

fupf88 2000-08-29
  • 打赏
  • 举报
回复
谢谢两位!
sixfooter:我按照你说的作了,不过一运行就退出VB了
hyui:用HOOK好象太夸张了
hyui 2000-08-27
  • 打赏
  • 举报
回复
用消息钩子呀!(API函数SetMessageHookEx)
sixfooter 2000-08-27
  • 打赏
  • 举报
回复
这个我会
过程是这样的
在你那个VC编的程序中要发消息的时候用sendmessgge函数
声明如下
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
第一个参数是接受消息窗口的hwnd,第二个参数是消息代码如果你要自定义消息可以发送
代号大于WM_USER = &H400的消息(wm_user在API常量可以查到),后两个参数是自己决定的只要和接受消息的程序协调好就可以了.
消息的发送方就可以了.

接收比较麻烦.窗口程序中写入如下代码
Private Sub Form_Load()

prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc
End Sub

Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hWnd, GWL_WNDPROC, prevWndProc
End Sub

再引入一个模块写入如下代码
Public Const GWL_WNDPROC = (-4)
Public Const WM_USER = &H400

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
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public prevWndProc As Long

Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg > WM_USER Then '在这里处理你的消息(嘿!!!!别看花眼了,向这看!!!!!!!)

WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End Function

有几点要注意不要在WndProc中打开窗口,也不要在其中给其它控件设置属性.
还有,接收窗口一定要正常卸载就是你在调试的时候要用窗口的 X 关闭它而不能用VB的停止按钮,
好了就这些.
  • 打赏
  • 举报
回复
关注!

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧