WPARAM 和 LPARAM 火柴人到底是什么意思啥意思

查看: 4184|回复: 5
怎么提取键盘消息的值在wParam和lParam,用messagebox输出来
UID: 445205
论坛新人, 积分 0, 距离下一级还需 50 积分
我吧((PKBDLLHOOKSTRUCT)l)-&vkCode转换成字符放到字符串数组中,然后MessageBox输出发现一个问题,当我在记事本里面按键是,第一字符成功输入到记事本并且MessageBox成功输出这个字符,第二次以后怎么按键盘都无法将字符输入到记事本了,好像消息被吃了。
另外一个问题:网上搜到wParam表示WM_KEYDOWN(UP),这个在DLL的钩子函数中是错的,但是在exe文件的钩子函数中又是对的,就是说在DLL的钩子函数中wParam与WM_KEYDOWN(UP)进行IF判断都是FALSE,在EXE文件里面可以
都是同样的钩子函数
LRESULT CALLBACK kb_proc (int code, WPARAM w, LPARAM l)
& & & & if(w==WM_KEYDOWN)
& & & & & & & & printf(&按下%c\n&,((PKBDLLHOOKSTRUCT)l)-&vkCode);
& & & & return CallNextHookEx (g_kb_hook, code, w, l);
HOOK自己能不能用
UID: 445205
论坛新人, 积分 0, 距离下一级还需 50 积分
本帖最后由 顺风走 于
12:55 编辑
回复 forestfairy 发表于
HOOK自己能不能用
都能用的,就是加了弹出框后消息无法传递下去了
第一个问题中钩子函数直接printf(&按下%c\n&,((PKBDLLHOOKSTRUCT)l)-&vkCode);
输出,消息可以正确输出,记事本里面可以显示按键,但是加了
char s[3];
s[0]='((PKBDLLHOOKSTRUCT)l)-&vkC
s[1]='\0';
MessageBox(NULL,s,&..&,NULL);
运行后只有第一个消息能够传递下去,之后在记事本按键都不显示了,MessageBox还可以正常输出
回复 顺风走 发表于
都能用的,就是加了弹出框后消息无法传递下去了
第一个问题中钩子函数直接printf(&按下%c\n&,((PKBDLL ...
HOOK的回调函数是系统调用的,跟主线程不在同一个线程,所以不能在回调函数里产生任何窗体,可以向主窗体postmessage一个消息在主窗体里处理
UID: 445205
论坛新人, 积分 0, 距离下一级还需 50 积分
本帖最后由 顺风走 于
15:04 编辑
回复 forestfairy 发表于
HOOK的回调函数是系统调用的,跟主线程不在同一个线程,所以不能在回调函数里产生任何窗体,可以向主窗体 ...
我只是在当前程序里面调用DLL里面的SetKbHook(DWORD),传入挂钩的线程句柄,在用SetKbHook()安装钩子SetWindowsHookEx(),并没有创建新的线程,另外我只是消息无法传递下去了,MessageBox()这个窗体还是可以正常弹出来的
回复 顺风走 发表于
我只是在当前程序里面调用DLL里面的SetKbHook(DWORD),传入挂钩的线程句柄,在用SetKbHook()安装钩子Set ...
是系统线程,可以在messagebox处设断点看是不是主线程
Powered by下次自动登录
现在的位置:
& 综合 & 正文
MFC 消息中( WPARAM wParam,LPARAM lParam)包含信息
windows的消息具有以下两个参数:  (1)字参数(wParam)  (2)长参数(lParam)  字参数和长参数都是32位整数,用于提供消息的附带消息,是消息传递过程中参数的载体。附加信息的消息号取决于消息号。
一、wParam和lParam消息 :部分说明需要查看MSDN
Specifies the type of resizing requested. This parameter can be one of the following values.
SIZE_MAXHIDE
Message is sent to all pop-up windows when some other window is maximized.
SIZE_MAXIMIZED
The window has been maximized.
SIZE_MAXSHOW
Message is sent to all pop-up windows when some other window has been restored to its former size.
SIZE_MINIMIZED
The window has been minimized.
SIZE_RESTORED
The window has been resized, but neither the SIZE_MINIMIZED nor SIZE_MAXIMIZED value applies
The low-order word of lParam specifies the new width of the client area.
The high-order word of lParam specifies the new height of the client area.
1 WM_PAINT消息,LOWORD(lParam)是客户区的宽,HIWORD(lParam)是客户区的高。
2 滚动条WM_VSCROLL或WM_HSCROLL消息,LOWORD(wParam)指出了鼠标对滚动条的操作。比如上、下、左、右、翻页、移动等。
3 击键消息,有WM_SYSKEYDOWN、WM_SYSKEYUP、WM_KEYUP、WM_KEYDOWN,其中wParam是虚拟键,lParam是包含属于击键的其他信息。lParam消息参数分为6个域,有重复计数、环境代码、键的先前状态等。
4 字符消息WM_CHAR、WM_DEADCHAR、WM_SYSCHAR、WM_SYSDEADCHAR,lParam消息参数跟击键消息的lParam消息参数内容相同,wParam参数是ANSI或Unicode字符代码
5 客户区鼠标消息WM_LBUTTONDOWN、WM_LBUTTONUP、WM_RBUTTONDOWN、WM_RBUTTONUP、WM_MBUTTONDOWN、WM_MBUTTONUP,lParam参数的低位是鼠标的客户区x坐标,高位是客户区y坐标。wParam参数是指示鼠标键及Shift和Ctrl键的状态。wParam&MK_SHIFT或MK_CTRL,如果返回TRUE就意味着有按下Shift或Ctrl键。
6 非客户区消息,wParam参数指明移动或者单击鼠标键的非客户区位置,以HT开头,lParam参数低位指出了鼠标所在屏幕坐标的x坐标,高位指出了鼠标所在屏幕坐标的y坐标。
7 鼠标轮滚动消息,WM_MOUSEWHEEL消息,lParam将获得鼠标的屏幕位置(坐标),wParam参数的低位表明鼠标键和Shift与Ctrl键的状态。wParam高位有一个“delta”值,该值可正可负,指出了滚轮导致屏幕滚动几行,120表示向上3行。
8 计时器消息WM_TIMER,wParam参数等于计时器的ID值,lParam为0
9 按钮子窗口的WM_COMMAND消息,wParam参数的低位是子窗口ID,高位是通知码, lParam参数是子窗口句柄。
10 焦点消息,对于正在失去焦点的窗口,会收到WM_KILLFOCUS消息,其wParam参数是即将接收输入焦点的窗口的句柄。对于即将获取焦点的窗口,会收到WM_SETFOCUS消息,其wParam参数是正在失去焦点的窗口的句柄。
11 编辑控制的WM_COMMAND消息,wParam参数的低位是子窗口ID,高位是通知码, lParam参数是子窗口句柄。
12 列表框的WM_COMMAND消息,wParam参数的低位是子窗口ID,高位是通知码, lParam参数是子窗口句柄。
13 菜单消息1,WM_INITMENU,wParam是主菜单句柄,lParam是0.
14 菜单消息2,WM_MENUSELECT,菜单跟踪消息,指针移到菜单的某一些,就会发送这个消息给窗口过程,其wParam参数的低位是选中项菜单的ID或者弹出式菜单的句柄,高位是选择标识,lParam参数是包含选中项的菜单句柄。
15 菜单消息3,WM_INITMENUPOPUP,准备显示一个弹出式菜单时产生的消息,wParam参数是弹出式菜单的句柄,lParam的低位是弹出式菜单的索引,如果该菜单是系统菜单,那么高位是1,否则为0。
16 菜单消息4,WM_COMMAND,选中菜单后产生,wParam低位是击中菜单的ID,高位是0,lParam参数也是0。
17 菜单消息5,WM_SYSCOMMAND,表示用户从系统菜单中选择一个启用的菜单项,其wParam参数是菜单的ID, lParam为0.如果该消息是由按鼠标产生的,那么lParam参数是鼠标的屏幕坐标。
18 加速键消息,WM_COMMAND消息,wParam低位是加速键ID,高位是1, lParam是0.
低位是客户区的宽
高位是客户区的高
WM_VSCROLL
WM_HSCROLL
窗口滚动条消息
低位指出了鼠标对滚动条的操作
虚拟键代码
分为6个域,有重复计数、环境代码、键的先前状态等
ANSI或Unicode字符代码
分为6个域,有重复计数、环境代码、键的先前状态等
客户区鼠标消息
指示鼠标键及Shift和Ctrl键的状态
鼠标的客户区坐标
非客户区鼠标消息
指明移动或者单击鼠标键的非客户区位置,以HT开头
鼠标的屏幕坐标
WM_MOUSEWHEEL
鼠标轮滚动消息
低位表明鼠标键和Shift与Ctrl键的状态
高位指出了滚轮导致屏幕滚动几行
鼠标的屏幕位置
计时器消息
计时器的ID值
WM_COMMAND
低位是子窗口ID,高位是通知码
子窗口句柄
WM_SETFOCUS
正在失去焦点的窗口的句柄
WM_KILLFOCUS
即将接收输入焦点的窗口的句柄
WM_COMMAND
低位是子窗口ID,高位是通知码
子窗口句柄
WM_COMMAND
低位是子窗口ID,高位是通知码
子窗口句柄
WM_INITMENU
主菜单句柄
WM_MENUSELECT
菜单跟踪消息
低位是选中项菜单的ID或者弹出式菜单的句柄,高位是选择标识
选中项的菜单句柄
WM_INITMENUPOPUP
准备显示一个弹出式菜单时产生
弹出式菜单的句柄
低位是弹出式菜单的索引,如果该菜单是系统菜单,那么高位是1,否则为0.
WM_COMMAND
选中菜单后产生
低位是击中菜单的ID
WM_SYSCOMMAND
用户从系统菜单中选择一个启用的菜单项
0如果该消息是由按鼠标产生的,那么是鼠标的屏幕坐标。
WM_COMMAND
加速键消息
低位是加速键ID
在Win32中,wParam
lParam是用来传递消息数据的最常用的手段.
比如,对按键消息来说,鼠标的X和Y的坐标被压缩进lParam中 ,对MFC来说,消息可以用多样的类型参数来传递,对用户自定义消息来说,只能用wParam和lParam来传递。
SDK中消息本身是作为一个结构体记录传递给应用的,这个记录中包含了消息的类型以及其他信息。这个记录类型叫做MSG,它在window中是这样声明的:
//窗口句柄
//消息常量标识符
//32位消息的特定附加信息,具体表示什么处决于message
//32位消息的特定附加信息,具体表示什么处决于message
//消息创建时的时间
//消息创建时的鼠标位置
接收消息的32位窗口句柄。窗口可以是任何类型的屏幕对象,
因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。
用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。
通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。
通常是一个指向内存中数据的指针。
由于wParam,lParam和指针都是32位的,需要时可以强制类型转换。具体表示什么,与message相关,他们是事先定义好的。
如果自定义消息:#define
WM_MYMESSAGE
WM_USER+100,需确定wParam,lParam的意义
(假设wParam=0时发送数据,wParam=1时接收数据,lParam为CMyClass*
指针,指向一个CMyClass对象,准备要发送的数据或接收数据
发送WM_MYMESSAGE时
SendMessage(hwnd,WM_MYMESSAGE,0,pMyClassObject)
接收消息的窗口,接收WM_MYMESSAGE中(CMyClass*)lParam参数即pMyClassObject传过来的数据
二、应用获取控件的ID
LOWORD(GetCurrentMessage()-&wParam) ===&获得发消息的控件ID值
WORD HIWORD(
DWORD dwValue
WORD LOWORD(
DWORD dwValue
&&&&推荐文章:
【上篇】【下篇】君,已阅读到文档的结尾了呢~~
VC中几个WM消息其lParam和wParam参数定义
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
VC中几个WM消息其lParam和wParam参数定义
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 凶榜结尾到底什么意思 的文章

 

随机推荐