Help~~~~ 如何截获windows消息 ????????????????????

codeguru 2000-04-04 10:15:00
比方说我想截获WM_GETMINMAXINFO消息
在delphi里可以用
procedure a(var msg : TMessage);message WM_GETMINMAXINFO;
截获,在vb里呢?请大虾们指教//bow
...全文
207 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Un1 2001-02-17
  • 打赏
  • 举报
回复
http://www.banasoft.com/DownLoad/BNHkLib.exe
codeguru 2000-04-15
  • 打赏
  • 举报
回复
这些日子网速满,都没怎么来看过,许久没给分,sorry & ok now
major2 2000-04-07
  • 打赏
  • 举报
回复
如果你不想用现成的控件也成,不过得用API函数,涉及到窗口的子分类技术。定义以下几个API函数:
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long '设置你自己的窗口函数,用来截取传给窗口的消息
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
'用来获得系统窗口函数的入口
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
'调用系统窗口函数
在窗口的form_load事件里重定位系统窗口函数到你的自定义窗口函数里,代码如下:

lPublic preWinProc As Long
'以上为声明区

public sub form_load()
Dim lresult As Long

'记录系统窗口函数的入口
lpreWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
'设定你的窗口函数到wndproc,你的窗口函数wndproc在下面给出定义
lresult = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf wndproc)
end sub

'下面是你的窗口函数代码的写法:
Public Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
'本过程会截取系统发过来的各种消息,请自己判断你要处理的,如WM_GETMINMAXINFO
If Msg = WM_GETMINMAXINFO Then
...(你要做的事情的程序)
End If
'将控制传回系统窗口函数
wndproc = CallWindowProc(lpreWinProc, hwnd, Msg, wParam, lParam)
End Function

一切OK了?关于子分类技术的详请请看MSDN光盘,祝你成功。
「已注销」 2000-04-05
  • 打赏
  • 举报
回复
最好用VC写一个窗口过程.
Janven 2000-04-05
  • 打赏
  • 举报
回复
我用的方法与你差不多,不过这种方法很容易当机,没办法你想让Windows回调你的消息处理程序,执行后,必须得完整无误的还原它。要注意的几点如下:
1.好不要在消息处理程序中打开另一个窗口。实在必要,也得在退出时跟踪一下程序怎么走的,作到完全退出。
2.不要使用MessageBox,实在调试要显示,使用Print吧
3.调试时,关闭程序不能使用VB的关闭按钮,只要你执行了消息处理程序,铁当机。而应该用你自己程序的退出语句。
总之,消息处理程序是不允许中途退出,避免这点就万事OK了
major2 2000-04-05
  • 打赏
  • 举报
回复
用现成的控件,我有一个,用过无数次,效果非常好,不会当机,不会减低程序效率,要不要?来个信我,就给你发过去,骗人是小猪!我的EMAIL:major2@263.net
codeguru 2000-04-05
  • 打赏
  • 举报
回复
谢谢您!!问题我已经解决,不过感觉这种方法不大好,请大虾们讨论

方法如下:
新建一工程,加一模块,在模块中添加如下代码:

Private Type POINTAPI
x As Long
y As Long
End Type
Private Type MINMAXINFO
ptReserved As POINTAPI
ptMaxSize As POINTAPI
ptMaxPosition As POINTAPI
ptMinTrackSize As POINTAPI
ptMaxTrackSize As POINTAPI
End Type
Const GWL_WNDPROC = -4&
Const WM_GETMINMAXINFO = &H24
Private ThisWnd As Long
Private OldWindowProc As Long
Private Declare Function SetWindowLong _
Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function CallWindowProc _
Lib "user32" _
Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Any, _
ByVal hwnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Declare Function CopyMemory _
Lib "kernel32" _
Alias "RtlMoveMemory" _
(ByVal pDest As Any, _
ByVal pSource As Any, _
ByVal ByteLen As Long) As Long


Public Function SetMyCallback(ByVal hwnd As Long)

ThisWnd = hwnd

OldWindowProc = SetWindowLong(ThisWnd, _
GWL_WNDPROC, _
AddressOf MyCallback)
End Function
Public Function DetachCallback()

SetWindowLong ThisWnd, GWL_WNDPROC, OldWindowProc
End Function
Private Function HandleGetMinMaxInfo(ByVal lpMinMaxInfo As Long) As Long

Dim mmi As MINMAXINFO

CopyMemory VarPtr(mmi), lpMinMaxInfo, Len(mmi)
With mmi
.ptMaxTrackSize.x = 200
.ptMaxTrackSize.y = 200
.ptMinTrackSize.x = 50
.ptMinTrackSize.y = 50
End With

CopyMemory lpMinMaxInfo, VarPtr(mmi), Len(mmi)

HandleGetMinMaxInfo = 0
End Function
Private Function MyCallback(ByVal hwnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

Dim Result As Long

If uMsg = WM_GETMINMAXINFO Then
Result = HandleGetMinMaxInfo(lParam)
Else
Result = CallWindowProc(OldWindowProc, hwnd, uMsg, wParam, lParam)
End If

MyCallback = Result
End Function


在主form的load事件如下
Private Sub Form_Load()
SetMyCallback Me.hwnd
End Sub

ok了~~~~~~`大虾们还有没有什么更好的意见?
Rayman 2000-04-04
  • 打赏
  • 举报
回复
我有个控件,据称可以截获windows消息,需要的话来信.不过我可没有使用过.

7,763

社区成员

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

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