CallWindowProc与setwindowlong 用法

学习提速专享!AI工具全家桶免费用 限时购周边加赠Coding Plan Lite,解锁20+主流AI工具,写代码、查资料快人一步! 阅读详情

该函数CallWindowProc将消息信息传送给指定的窗口过程。

    函数原型:LRESULT CallWindowProc(WNDPROC lpPrevWndFunc,HWND hWnd.UINT Msg,WPARAM wParam,LPARAMIParam);

    参数:

    lpPrevWndFunc:参数主要是指向你要调用的函数句柄

    hWnd:指向接收消息的窗口过程的句柄。

    Msg:指定消息类型。

    wParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。

    IParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。

    返回值:返回值指定了消息处理结果,它与发送的消息有关。

    备注:使用函数CallWindowsProc可进行窗口子分类。通常来说,同一类的所有窗口共享一个窗口过程。子类是一个窗口或者相同类的一套窗口,在其消息被传送到该类的窗口过程之前,这些消息是由另一个窗口过程进行解释和处理的。

    SetWindowLoog函数通过改变与特定窗口相关的窗日过程,使系统调用新的窗口过程来创建子类,新的窗口过程替换了以前的窗口过程。应用程序必须通过调用CallWindowsProc来将新窗日过程没有处理的任何消息传送到以前的窗口过程中,这样就允许应用程序创建一系列窗口过程。

 

SetWindowLong() 函数

VB声明
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
说明
在窗口结构中为指定的窗口设置信息
返回值
Long,指定数据的前一个值
参数表
参数 类型及说明
hwnd Long,欲为其取得信息的窗口的句柄
nIndex Long,请参考GetWindowLong函数的nIndex参数的说明
dwNewLong Long,由nIndex指定的窗口信息的新值

 

GetWindowLong ()函数

VB声明
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
说明
从指定窗口的结构中取得信息
返回值
Long,由nIndex决定。零表示出错。会设置GetLastError
参数表
参数 类型及说明
hwnd Long,欲为其获取信息的窗口的句柄
nIndex Long,欲取回的信息,可以是下述任何一个常数:
GWL_EXSTYLE 扩展窗口样式
GWL_STYLE 窗口样式
GWL_WNDPROC 该窗口的窗口函数的地址
GWL_HINSTANCE 拥有窗口的实例的句柄
GWL_HWNDPARENT 该窗口之父的句柄。不要用SetWindowWord来改变这个值
GWL_ID 对话框中一个子窗口的标识符
GWL_USERDATA 含义由应用程序规定
DWL_DLGPROC 这个窗口的对话框函数地址
DWL_MSGRESULT 在对话框函数中处理的一条消息返回的值
DWL_USER 含义由应用程序规定

 

 

WindowProc是个窗口过程,其返回值是由系统处理的,应用程序中是不用也无法处理的。
Public   Sub   Hook(hWnd   As   Long)  
  lngHWnd=hWnd  
  lpPrevWndProc   =   SetWindowLong(lngHWnd,  
  GWL_WNDPROC,   AddressOf   WindowProc)  
End   Sub  
调用这个挂钩函数后,当有消息到窗口后,有系统调用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_RBUTTONUP  
        什么事也不做  
      或弹出自己定制的菜单  
    Case   Else  
    WindowProc   =   CallWindowProc(lpPrevWndProc,  
hw,   uMsg,   wParam,   lParam)  
    End   Select  
End   Function  

 

VB6.0window消息处理方式 WINDOW消息 阅读详情

相关推荐

SetWindowLongSetWindowLongPtr:64位Windows窗口子类化迁移指南

在Windows编程中,窗口子类化是一种通过替换窗口过程来扩展或修改窗口行为的基础技术,其核心原理是拦截并处理发送到窗口的消息。随着系统从32位迁移至64位,数据模型的变化带来了技术挑战:指针长度从4字节扩展为8字节,而传统的SetWindowLong API因其参数设计仅支持32位值,在传递64位指针时会发生高位截断,导致功能失效或程序崩溃。这一问题的技术价值在于揭示了保持代码跨平台兼容性时对数据类型尺寸的精确把控至关重要。在涉及窗口消息处理、自定义控件开发等应用场景中,开发者必须使用专为64位设计的Se

weixin_30540691的博客 412

CallWindowProc

How To Use CALLWINDOWPROC to Call VB function--->> Tips&Tricks; This file came from Planet-Source-Code.com...the home millions of lines of source code You can view comments on this code/and or vote on it

C++程序编程中的 SetWindowLong 函数的几个常见用途(附源码)

本文讲解C++程序编程中的 SetWindowLong 几个常见用法

dvlinker的技术专栏 441

CallWindowProcDefWindowProc的区别

LRESULT CallWindowProc(WNDPROC lpPrevWndFunc,HWND hWnd.UINT Msg,WPARAM wParam,LPARAMIParam); 函数功能, CallWindowProc将指定消息信息传送给指定的窗口过程. lpPre

5699

让你的文本框 “聪明” 一点

近来在设计一个热键设置程序中我学会了使用SetwindowlongCallwindowproc这两个Api函数,有了它我们就可以处理你的窗口或控件所接收到的任何消息.由于前一段时间我看过一篇介绍QQ密码监视盗取法的文章,使我想到是不是可以用这两个函数来进行密码保护呢,经过一番尝试终于成功了,现在拿出来大家分享。    几乎所有的监视程序都是通过向你密码的文本框发送一条WM_GETTEXT消息来

冬天的蚊子 1321

CallWindowProcsetwindowlong用法

该函数CallWindowProc将消息信息传送给指定的窗口过程。 函数原型: LRESULT CallWindowProc(WNDPROC lpPrevWndFunc,HWND hWnd.UINT Msg,WPARAM wParam,LPARAMIParam); 参数: lpPrevWndFunc:参数主要是指向你要调用的函数句柄 hWnd:指向接收消息的窗口过程的句柄。 M

求知者 2678

转:介绍shell_notifyicon,SendMessage,CallWindowProc,GetWindowLong,SetWindowLong用法

PublicDeclareFunctionShell_NotifyIconLib"shell32.dll"Alias"Shell_NotifyIconA"(ByValdwMessageAsLong,lpDataAsNOTIFYICONDATA)AsLongPublicDeclareFunctionSendMessageLib"u...

demonzsmj12315的博客 258

callwindowproc

      函数功能:该函数CallWindowProc将消息信息传送给指定的窗口过程。    函数原型:LRESULT CallWindowProc(WNDPROC lpPrevWndFunc,HWND hWnd.UINT Msg,WPARAM wParam,LPARAMIParam);    参数:    lpPrevWndFunc:指向前一个窗口过程的指针。如果该值是通过调用GetWindo

692

使用SetwindowlongCallwindowproc这两个Api函数[转的]

使用SetwindowlongCallwindowproc这两个Api函数[转的] 2011年12月01日   近来在设计一个热键设置程序中我学会了使用SetwindowlongCallwindowproc这两个Api函数,有了它我们就可以处理你的窗口或控件所接收到的任何消息.由于前一段时间我看过一篇介绍QQ密码监视盗取法的文章,使我想到是不是可以用这两个函数来进行密码保护呢,经过一...

calw58calw 572

GetWindowLong,SetWindowLongCallWindowProc

WNDPROC                g_deskproc; LRESULT CALLBACK DeskWndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {     switch(uMsg)  {         case WM_LBUTTONDOWN:            

jmunic的专栏 1309

使用SetwindowlongCallwindowproc这两个Api函数

近来在设计一个热键设置程序中我学会了使用SetwindowlongCallwindowproc这两个Api函数,有了它我们就可以处理你的窗口或控件所接收到的任何消息.由于前一段时间我看过一篇介绍QQ密码监视盗取法的文章,使我想到是不是可以用这两个函数来进行密码保护呢,经过一番尝试终于成功了,现在拿出来大家分享。 几乎所有的监视程序都是通过向你密码的文本框发送一条WM_GETTEXT消息来...

weixin_33910385的博客 592

SetWindowLong 用法总结

SetWindowLong 函数原型为:LONG SetWindowLong(HWND hwnd,int nIndex,Long dwNewLong);详见MSDN。 下面简单总结一下SetWindowLong函数几种常用的地方: 1.设置窗口风格    如:SetWindowLong(hWnd, GWL_STYLE, WS_POPUP|WS_BORDER);      //有边

MachiealFactory的博客 3168

SetWindowLong And GetWindowLong

 SetWindowLong的使用及其简单,比如我们将m_hEdWord窗口的消息处理函数置换为CtrlProc:     SetWindowLong(m_hEdWord,GWL_WNDPROC,(DWORD)CtrlProc);    就这么简单,现在只要m_hEdWord窗口收到消息,那么就会自动调用预先定义的CtrlProc.      有设置,自然也有获取,不过这次

liuxingbin的专栏 2066

MFC SetWindowLong支持功能

原型: WINUSERAPI LONG WINAPI SetWindowLongA( _In_ HWND hWnd, _In_ int nIndex, _In_ LONG dwNewLong); WINUSERAPI LONG WINAPI SetWindowLongW( _In_ HWND hWnd, _In_ int nIndex, _In_ LONG dwNewLong); #ifdef UNICODE #define SetWindowLong S...

kevin的博客 688

SetWindowLong设置窗口新过程

函数原型:LONG SetWindowLong(HWND hWnd, int nIndex, LONG dwNewLong); 主要说明函数的第二个参数为GWL_WNDPROC的情况。 GWL_WNDPROC Sets a new address for the window procedure. You cannot change this attribute ...

weixin_34292287的博客 1435

SetWindowLong

函数功能:该函数改变指定窗口的属性.函数也将指定的一个32位值设置在窗口的额外存储空间的指定偏移位置。函数原型:LONG SetWindowLong(HWND hWnd,int nlndex,LONG dwNewLong);参数:hWnd:窗口句柄及间接给出的窗口所属的类。nlndex:指定将设定的大于等于0的偏移值。有效值的范围从0到额外类的存储空间的字节数-4:例如若指定了12位或多于12位的...

weixin_30915951的博客 545
上一篇: 获取当前活动窗口句柄和标题
下一篇: HOOK专题
snlei
博客等级 码龄24年 150粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值