vb6实现对windows消息拦截

vb6实现对windows消息拦截

ID:20851921

大小:30.00 KB

页数:7页

时间:2018-10-17

vb6实现对windows消息拦截_第1页
vb6实现对windows消息拦截_第2页
vb6实现对windows消息拦截_第3页
vb6实现对windows消息拦截_第4页
vb6实现对windows消息拦截_第5页
资源描述:

《vb6实现对windows消息拦截》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、VB6实现对Windows消息的拦截众所周知,VB的功能没有VC++、Delphi这样的全功能开发平台强大,但她也足以完成我们绝大部分的工作,只要你开动脑筋,敢想敢干,我们可以让VB发挥最大的效能,做出许多令人惊叹的软件。开发高难度软件,并不只是VC++和Delphi的专利!过去普遍认为VB无法自定义拦截Windows的消息,只能靠VB本身提供的几个有限的事件来编程,这有很大的局限性。缺少消息捕获,同时又被认为不支持回调函数机制(主要是因为VB没有指针,更谈不上函数指针),这造成了VB编程的很大局限性。事实上,VB可以采用别的办法变相地实现这一机制。从VB5

2、.0开始就提供了AddressOf操作符,利用这个操作符可以获取VB自定义函数的地址。有了函数地址就可以采用回调函数的机制了。当然,VB仍然无法实现VB函数之间的地址传递,她只支持VB函数到DLL的函数抵制传递。但是,这已经足够了。下面这个程序,就是采用了这一方法,程序中只有一个主窗体,通过设置属性,使得主窗体没有边框,没有标题栏,不能改变大小,不能通过标题栏托动。但是通过拦截Windows消息可以使得鼠标处在窗体中的任意位置都可以托动它,就像按住标题栏托动一样。这个程序没有用到任何附加的控件,全部采用VB代码完成。注意,请增加一个公共模块,以便声明一些函数

3、和常数。以下代码在VB6.0中通过。’===================================’这是公共模块的代码AttributeVB_Name="Module1"OptionExplicitPublicConstWM_NCHITTEST=&H84PublicConstVK_LBUTTON=&H1PublicConstHTCAPTION=2PublicConstHTCLIENT=1PublicDeclareFunctionGetAsyncKeyStateLib"user32"(ByValvKeyAsLong)AsIntegerPublicDe

4、clareFunctionCallWindowProcLib"user32"Alias"CallWindowProcA"(ByVallpPrevWndFuncAsLong,ByValhwndAsLong,ByValMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLongPublicDeclareFunctionSetWindowLongLib"user32"Alias"SetWindowLongA"(ByValhwndAsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)A

5、sLongPublicConstGWL_WNDPROC=-4GloballpPrevWndProcAsLongGlobalgHWAsLong’这里是关键,我自定义了一个窗口函数(回调函数),以替代VB窗体自己的默认窗口函数。’窗口函数是干什么的?它就是负责处理Windows发送给它的消息,并加以过滤,筛选出它感兴趣’的消息,映射成为事件供我们使用。VB中每个窗口都有一个默认的窗口函数,我们是看不到的。’有很多消息都被VB的默认窗口函数过滤掉了。了解C/C++/Delphi程序设计的朋友应该知道这些。FunctionWindowProc(ByValhwAsLo

6、ng,ByValuMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong’我们也进行消息过滤,不过我们指拦截我们感兴趣的消息’其他消息我们懒得处理,交给VB默认的窗口函数去处理吧。SelectCaseuMsgCaseWM_NCHITTEST’拦截WM_NCHITTEST消息IfGetAsyncKeyState(VK_LBUTTON)<0Then’是否有鼠标左键在窗体客户区按下?’如果是,函数返回值被设置为HTCAPTION,欺骗Windows,让它以为鼠标是按在标题栏’Windows是通过窗口函数的返回值进行

7、判断处理的WindowProc=HTCAPTIONExitFunctionElse’其他的我们不管,还是规规矩矩的该怎么样就怎么样WindowProc=HTCLIENTExitFunctionEndIfEndSelect’这里又是关键,因为其他我们不关心的消息我们自己不处理,所以必须由VB的默认处理函数处理’lpPrevWndProc其实就是一个函数指针,它指向VB默认窗口函数WindowProc=CallWindowProc(lpPrevWndProc,hw,uMsg,wParam,lParam)EndFunction’==================

8、=================’这是窗体的代码V

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。