文章目录[隐藏]
SetWindowLong函数原型
LONG SetWindowLong( HWND hWnd, int nIndex, LONG dwNewLong );
是用来改变和设置窗口的一些属性的,第一个参数是你窗口的句柄,第二个就是你要修改的东东 例如要修改过程处理函数 就用参数 GWL_WNDPROC 而最后一个参数就是你自己定义的过程函数的名字 但是一定要注意那个是长整形的一个类型所以要强制转化 他返回的也是一个长整形 如果你定义的是一个WNDPROC的指针 这个返回的地方同样也需要强制转化类型
其中nInde可以取:
GWL_EXSTYLE: 设置窗口扩展风格,即CreateWindowEx的DWORD wExStyle 参数 GWL_STYLE: 设置窗口风格,即CreateWindow的DWORD dwStyle参数 GWL_WNDPROC: 设置窗口的处理函数,即RegisterClass的WNDCLASSEX的WNDPROC lpfnWndProc成员 GWL_HINSTANCE: 设置窗口所属的应用程序句柄,即RegisterClass的WNDCLASSEX的HINSTANCE hInstance成员 GWL_ID 设置窗口的ID(对于控件,就是控件ID) GWL_USERDATA: 设置窗口的用户自定义数据 DWL_DLGPROC: 设置对话框处理函数 DWL_MSGRESULT: 设置对话框消息处理的结果值 DWL_USER: 设置扩展区域数据
GWL_WNDPROC -4 为窗口过程设定一个新的地址。
你这里是要修改原窗口的回调函数,所以指定的类型为GWL_WNDPROC,参数是你自定义的回调函数
参数
hWnd
窗口句柄及间接给出的窗口所属的类。
nlndex
指定将设定的大于等于0的偏移值。有效值的范围从0到额外类的存储空间的字节数减4:例如若指定了12或多于12个字节的额外窗口存储空间,则应设索引位8来访问第三个4字节,同样设置0访问第一个4字节,4访问第二个4字节。要设置其他任何值,可以指定下面值之一:
常量
|
常量值 |
意义
|
---|---|---|
GWL_EXSTYLE
|
-20 |
设定一个新的扩展风格。
|
GWL_HINSTANCE
|
-6 |
设置一个新的应用程序实例句柄。
|
GWL_ID
|
-12 |
设置一个新的窗口标识符。
|
GWL_STYLE
|
-16 |
设定一个新的窗口风格。
|
GWL_USERDATA
|
-21 |
设置与窗口有关的32位值。每个窗口均有一个由创建该窗口的应用程序使用的32位值。
|
GWL_WNDPROC
|
-4 |
为窗口设定一个新的处理函数。
|
GWL_HWNDPARENT | -8 | 改变子窗口的父窗口,应使用SetParent函数。 |
当hWnd参数标识了一个对话框时,也可使用下列值:
常量
|
常量值 |
意义
|
---|---|---|
DWL_DLGPROC
|
DWLP_MSGRESULT + sizeof(LRESULT) (值:4) |
设置对话框过程的新地址。
|
DWL_MSGRESULT
|
0 |
设置在对话框过程中处理的消息的返回值。
|
DWL_USER
|
DWLP_DLGPROC + sizeof(DLGPROC) (值:8) |
设置的应用程序私有的新的额外信息,例如一个句柄或指针。
|
dwNewLong
指定的替换值。
dwNewLong中可以使用以下一些列表控件的专用风格:
LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT
这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:
大图标显示,小图标显示,列表显示,详细报表显示
LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。
LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点
返回值
如果函数成功,返回值是指定的32位整数的原来的值。如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
如果指定32位整数的原来的值为0,并且函数成功,则返回值为0,但是函数并不清除最后的错误信息,这就很难判断函数是否成功。这时,就应在调用SetWindowLong之前调用SetLastError(0)函数来清除最后的错误信息。这样,如果函数失败就会返回0,并且GetLastError。也返回一个非零值。
GetWindowLong函数
GetWindowLong是一个Windows API函数。该函数获得指定窗口的有关信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值。
LONG GetWindowLong( HWND hWnd,int nIndex ) 参数: hWnd:指定窗口的句柄 nIndex:需要获得的信息的类型
nIndex取值如下: GWL_EXSTYLE 得到扩展的窗口风格 GWL_STYLE 得到窗口风格 GWL_WNDPROC 得到窗口回调函数的地址,或者句柄。得到后必须使用CallWindowProc函数来调用 GWL_HINSTANCE 得到应用程序运行实例的句柄 GWL_HWNDPARENT 得到父窗口的句柄 GWL_ID 得到窗口的标识符 GWL_USERDATA 得到和窗口相关联的32位的值(每一个窗口都有一个有意留给创建窗口的应用程序是用的32位 的值) 当hWnd标识一个对话框时可以使用下面的值 Value Action DWL_DLGPROC 得到对话框回调函数的地址,或者句柄。得到后必须使用CallWindowProc函数来调用 DWL_MSGRESULT 得到对话框回调函数中消息处理过程的返回值 DWL_USER 得到额外的应用程序私有信息,如一些句柄和指针等 返回值: 成功时,返回一个请求的32位的值 失败时,返回0,可以使用GetLastError来取得错误信息
注意:
/* * Window field offsets for GetWindowLong() */ #define GWL_WNDPROC (-4) #define GWL_HINSTANCE (-6) #define GWL_HWNDPARENT (-8) #define GWL_STYLE (-16) #define GWL_EXSTYLE (-20) #define GWL_USERDATA (-21) #define GWL_ID (-12) /* * Get/SetWindowWord/Long offsets for use with WC_DIALOG windows */ #define DWL_MSGRESULT 0 #define DWL_DLGPROC 4 #define DWL_USER 8 ---------------------
GWL_WNDPROC (-4) 获得窗口过程的地址,或代表窗口过程的地址的句柄。必须使用CallWindowProc函数调用窗口过程。
参数
hWnd
目标窗口句柄,间接指向其窗口类。
nlndex
若指定值大于0,返回窗口内存中指定偏移量的32位值。
也可指定以下值来获得其它数据:
宏定义 | 常量 | 描述 |
---|---|---|
GWL_EXSTYLE
|
-20 | 获取扩展窗口样式 |
GWL_HINSTANCE
|
-6 | 获取应用实例句柄 |
GWL_HWNDPARENT
|
-8 | 获取所有者窗口句柄 |
GWL_ID
|
-12 | 获取窗口ID |
GWL_STYLE
|
-16 | 获得窗口样式 |
GWL_USERDATA
|
-21 | 获取用户设置的32位数据,其值默认为0 |
GWL_WNDPROC
|
-4 | 获取窗口过程地址或句柄。必须使用CallWindowProc函数调用获取的窗口过程。 |
hWnd参数为对话框句柄时,还可用下列值:
宏定义 | 常量 | 描述 |
---|---|---|
DWL_DLGPROC
|
4 | 获取对话框过程地址或句柄。必须使用CallWindowProc函数来调用对话框过程。 |
DWL_MSGRESULT
|
0 | 获取在对话框过程中某消息的返回值。 |
DWL_USER
|
8 | 获取应用程序专用的额外信息,例如一个句柄或指针。 |
返回值
如果函数成功,返回值是所需的32位整型值;
如果函数失败,返回值是0。获得更多错误信息请调用 GetLastError。
所以可以先GetWindowLong获得老的窗口处理函数,然后通过SetWindowLong在拦截消息后,再发给老处理函数处理。
所属分类: 编程
没有相关文章!
相关文章:
▪ 易语言PathRelativePathToA关联路径2020-06-20
▪ 易语言操作数据库之EDB数据库2022-04-27
▪ 易语言教程信息框2017-07-30
▪ 易语言API hook CreateWindowExA2020-05-10
▪ 易语言永久修改窗口标题2020-05-31
▪ 易语言SHCreateThread创建扩展线程2020-06-18
▪ 大漠多线程多窗口多账号自动登录自动切换任务2019-06-14
▪ C语言求两个整数及三个整数中的较大者2021-02-21
▪ 易语言多线程大漠多线程-36大漠多线程模板-6脚本主线程2019-03-23
▪ 易语言输入法注入2019-05-04