(1)发送成功,使用vc做的测试工具可以收到
消息注册:WM_ATTACK=RegisterWindowMessage("WM_ATTACK");
发送:PostMessage HWND_BROADCAST, WM_ATTACK,0,0
(2)接受部分
lpPrevWndProc = SetWindowLong(me.hwnd, GWL_WNDPROC,AddressOf WindowProc)
处理函数:
Function WindowProc(ByVal hw As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long Select Case uMsg
Case WM_ATTACK
Form1.Caption = "FIND"
Case Else
WindowProc = CallWindowProc(lpPrevWndProc, hw, _
uMsg, wParam, lParam)
End Select
End Function
(3)使用spy++看了下发现所有的VB程序都收不到广播的自定义消息,奇怪
请大侠帮忙!
消息注册:WM_ATTACK=RegisterWindowMessage("WM_ATTACK");
发送:PostMessage HWND_BROADCAST, WM_ATTACK,0,0
(2)接受部分
lpPrevWndProc = SetWindowLong(me.hwnd, GWL_WNDPROC,AddressOf WindowProc)
处理函数:
Function WindowProc(ByVal hw As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long Select Case uMsg
Case WM_ATTACK
Form1.Caption = "FIND"
Case Else
WindowProc = CallWindowProc(lpPrevWndProc, hw, _
uMsg, wParam, lParam)
End Select
End Function
(3)使用spy++看了下发现所有的VB程序都收不到广播的自定义消息,奇怪
请大侠帮忙!
解决方案 »
- mshflexgrid的更新问题,谢谢了
- ListView 控件里怎样让用户不能编辑,马上结
- VB编的程序怎么样使物理内存的占用挪到虚拟内存里?
- 大侠们,兄弟想问VB程序员在北京或北方,薪水一般多少呀
- 请问有无离散数据网格化的算法或源码?我想根据离散数据画等值线用。谢谢了。
- 真心求教
- 100分在线询问:动态设置textbox的datasource的问题。
- windows资源管理器样式的窗口问题
- 请赐教。如何在Win2K下屏蔽Ctrl+Alt+Del和Alt+Tab等组合键?
- 请教高手:如何用vb的多线程处理这个应用? 急急啊
- picture中加裁jpg图片?
- 高分在线等set identity_insert T1 on 在VB里执行取消自增功能问题
一、广播发送端:
Option ExplicitPrivate Declare Function BroadcastSystemMessage Lib "user32" (ByVal dw As Long, pdw As Long, ByVal un As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const BSF_POSTMESSAGE = &H10
Private Const BSF_APPLICATIONS = &H8
Private Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long
Private WM_ATTACK As Long '因为需要跨进程,为防止消息号冲突,所以由系统分配一个唯一的消息号Private Sub Command1_Click()
WM_ATTACK = RegisterWindowMessage("WM_ATTACK")
BroadcastSystemMessage BSF_POSTMESSAGE, BSF_APPLICATIONS, WM_ATTACK, 0&, 0&
End Sub二、广播接收端:
模块文件:
Option ExplicitPublic Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long
Public 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 Const WM_USER = &H400
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Public Const MB_OK = &H0&Public lpPrevProc As Long '原来的消息泵
Public WM_ATTACK As Long '因为需要跨进程,为防止消息号冲突,所以由系统分配一个唯一的消息号Public Function MyProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case Msg
Case WM_ATTACK
MessageBox hwnd, "接收到广播", "提示", MB_OK
End Select
MyProc = CallWindowProc(lpPrevProc, hwnd, Msg, wParam, lParam)
End Function
窗口文件:
Option ExplicitPrivate Sub Form_Load()
WM_ATTACK = RegisterWindowMessage("WM_ATTACK")
lpPrevProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf MyProc)
End SubPrivate Sub Form_Unload(Cancel As Integer)
Call SetWindowLong(Me.hwnd, GWL_WNDPROC, lpPrevProc)
End Sub
使用你的方法可以实现了
但是mmsdn里面是这样的
HWND_BROADCAST :The message is posted to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows. The message is not posted to child windows.
消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口。请问VB的form是什么类型的