找高手解:如何建立窗口钩子呢?
如何建立窗口钩子呢?
比如要监测其它软件窗体的变化,如何实现呢?
[解决办法]
这个可麻烦罗,得使用跨进程子类化,好象网上没有公开的代码
都是研究出来了自己收藏....
帮顶顶
[解决办法]
老马是不是研究出来了!呵呵,啥时候公布啊?
[解决办法]
为目标线程安装消息钩子
[解决办法]
http://post.baidu.com/f?ct=335675392&tn=baiduPostBrowser&sc=2368855222&z=136236976&pn=0&rn=50&lm=0&word=vb#2368855222
有资料
[解决办法]
Option Explicit
Public Declare Function GetWindowLong Lib "user32 " Alias "GetWindowLongA " (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32 " Alias "SetWindowLongA " (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32 " Alias "RtlMoveMemory " (pDest As Any, pSource As Any, ByVal ByteLen As Long)
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 SetWindowPos Lib "user32 " (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_DRAWFRAME = &H20
Private Const WS_THICKFRAME = &H40000
Private Const GWL_STYLE = (-16)
Private Const WS_SYSMENU = &H80000
Public Const GWL_WNDPROC = (-4)
Public Const WM_GETMINMAXINFO = &H24
Public OldWindowProc As Long
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
'限制窗体大小为620*497(子类化技术)
Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wp As Long, ByVal lp As Long) As Long
If Msg = WM_GETMINMAXINFO Then
Dim MinMax As MINMAXINFO
CopyMemory MinMax, ByVal lp, Len(MinMax)
MinMax.ptMinTrackSize.x = 620
MinMax.ptMinTrackSize.y = 492
CopyMemory ByVal lp, MinMax, Len(MinMax)
WndProc = 1
Exit Function
End If
WndProc = CallWindowProc(OldWindowProc, hwnd, Msg, wp, lp)
End Function
'控制指定窗体是否可以调整大小(可以把controlName声明为object就可以调整任何控件了)
Public Sub ControlSize(ByVal controlName As Form, setTrue As Boolean)
Dim dwStyle As Long
dwStyle = GetWindowLong(controlName.hwnd, GWL_STYLE)
If setTrue Then
dwStyle = dwStyle Or WS_THICKFRAME
Else
dwStyle = dwStyle - WS_THICKFRAME
End If
dwStyle = SetWindowLong(controlName.hwnd, GWL_STYLE, dwStyle)
SetWindowPos controlName.hwnd, controlName.hwnd, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
End Sub
[解决办法]
关注一下!
找高手解:怎么建立窗口钩子呢
找高手解:如何建立窗口钩子呢?如何建立窗口钩子呢?比如要监测其它软件窗体的变化,如何实现呢?[解决办法]这
