注册 登录
编程论坛 汇编论坛

关于wparam的问题

bobo2185355 发布于 2013-01-11 21:10, 1017 次点击
我在看一个在一个对话框中的列表框结束一个进程的例子,里面有一段不明白呢

.elseif eax == WM_COMMAND
                                    mov     eax,wParam
                                    .if     ax ==   IDOK                                ;(结束ID)
                                    invoke  SendMessage,hWinList,LB_GETCURSEL,0,0
                                    invoke  SendMessage,hWinList,LB_GETITEMDATA,eax,0    ;这里的EAX的值是什么,选中的进程ID?
                                    invoke  OpenProcess,PROCESS_TERMINATE, FALSE,eax    ;这里的EAX肯定是选中的进程ID
                                     ;
问题是 这个对话框引发的WM_COMMAND消息,wparam中,低16位是命令ID,高16为是什么?通知码?选中进程的ID?
我这么说可能不对,我想了半天也只能这么问了
                                            

                                    

                                          
13 回复
#2
mayuebo2013-01-11 21:17
command 应该是点击时鼠标的坐标
#3
bobo21853552013-01-11 21:19
不是啊
#4
bobo21853552013-01-11 21:26
选某一项应该是LBN_SELCHANGE吧 和我的问题没关系吧
#5
信箱有效2013-01-11 21:51
invoke  SendMessage,hWinList,LB_GETCURSEL,0,0
返回焦点序号
invoke  SendMessage,hWinList,LB_GETITEMDATA,eax,0
LB_GETITEMDATA  获得与指定的列表框中条目相关的程序自定义值
#6
bobo21853552013-01-11 22:01
哥 我问的不是API的用处,是EAX的值和他是否来自wparam的高16位
#7
bobo21853552013-01-11 22:02
不过也谢谢你帮我分析啊,到时候结贴也分你几分
#8
信箱有效2013-01-11 22:12
愁人  虽然我学的也早都忘了 不过我还是赶脚你的思路有问题。
调用API有什么目的和作用  表现在什么地方 是否会有返回值
返回值出现在哪里
你把EAX都看成死的了 想破脑子也不成啊
#9
bobo21853552013-01-11 22:22
这个嘛....我觉得列表框以后肯定用的到,而且还想多了解点消息机制才发的帖子,新手嘛 问题积攒多了以后肯定麻烦大大的
#10
x64asm2013-01-11 22:58
对于WM_COMMAND消息来说,WINDOWS发送的时候,WPARAM高16位是通知码类型,低16位是控件ID.
通知码类型例如BN_CLICKED等等.
#11
信箱有效2013-01-12 16:38
以下是引用bobo2185355在2013-1-11 22:22:03的发言:

这个嘛....我觉得列表框以后肯定用的到,而且还想多了解点消息机制才发的帖子,新手嘛 问题积攒多了以后肯定麻烦大大的
我并不是简单的重复一下API的用处,而是你没理解为什么重复那2个API的用处。

invoke  SendMessage,hWinList,LB_GETCURSEL,0,0
返回焦点序号
意思就是选中的条目在LIST中的序号被返回,返回到哪里了?当然是在eax里。
所以这条语句完成后 EAX中的值是列表框中的序号。比如QQ序号如果是8 下面跟着的一个进程的序号就是9 再下一条就是A。。。选中哪个 EAX中就是哪个的序号。


invoke  SendMessage,hWinList,LB_GETITEMDATA,eax,0
LB_GETITEMDATA  获得与指定的列表框中条目相关的程序自定义值
这条语句中 eax中的序号是作为参数传给SendMessage的。
语句完成后,返回了那个序号对应的自定义值,该值即是进程ID。 当然也是
返回到了EAX中。


eax中的值是在变化的,不是说你看到有改变它的语句它才变。你把这几句中的
eax都看成死的 当然会想不明白。
#12
bobo21853552013-01-12 21:45
invoke  OpenProcess,PROCESS_TERMINATE, FALSE,eax 那这里的EAX是上一个SendMessage返回的序号,而不是ID?
#13
信箱有效2013-01-12 22:15

invoke  SendMessage,hWinList,LB_GETCURSEL,0,0
该语句返回焦点序号
invoke  SendMessage,hWinList,LB_GETITEMDATA,eax,0

该语句返回那个序号对应的自定义值,该值即是进程ID

这条语句中 eax中的序号是作为参数传给SendMessage的。
语句完成后,返回了那个序号对应的自定义值,该值即是进程ID。 当然也是
返回到了EAX中。

选中焦点 --取得焦点序号 --根据焦点序号取得进程ID
焦点序号是对于LIST列表来说的  
进程ID是对于系统来说的。

我感觉。。。11楼已经写的很清楚了。。。

你都看到这个地方了 似乎对最基本的东东还很陌生。
这个是最最简单的了。。。。。。
#14
bobo21853552013-01-12 23:02
明白了
1