首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

键盘钩子有个地方不太懂,该如何处理

2012-03-05 
键盘钩子有个地方不太懂《Windows环境下32位汇编语言程序设计》中钩子的一个例子:Assembly code

键盘钩子有个地方不太懂
《Windows环境下32位汇编语言程序设计》中钩子的一个例子:

Assembly code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 键盘钩子回调函数;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>HookProc    proc    _dwCode,_wParam,_lParam        local    @szKeyState[256]:byte        invoke    CallNextHookEx,hHook,_dwCode,_wParam,_lParam        invoke    GetKeyboardState,addr @szKeyState        invoke    GetKeyState,VK_SHIFT        mov    @szKeyState + VK_SHIFT,al        mov    ecx,_lParam        shr    ecx,16        invoke    ToAscii,_wParam,ecx,addr @szKeyState,addr szAscii,0        mov    byte ptr szAscii [eax],0        invoke    SendMessage,hWnd,dwMessage,dword ptr szAscii,NULL        xor    eax,eax        retHookProc    endp

其中GetKeyState,VK_SHIFT
mov @szKeyState+VK_SHIFT,al
这两句我不是很懂,首先,根据GetKeyState的说明,好像返回值需要2个字节,也就是说,需要2个字节才能描述一个键的状态,但是GetKeyboardState每个键只用一个字节来说明状态,到底这一个字节是怎么描述按键状态的呢?我在MSDN上居然没找到
另外,GetKeyboardState不返回VK_SHIFT的状态吗?他不是返回256个按键的状态吗,怎么有的返回有的还不返回呢,还要自己去GetKeyState,书上说GetKeyboardState返回VK_LSHIFT和VK_RSHIFT的状态,它就不能顺便把VK_SHIFT的状态也返回了?


[解决办法]
Windows API 封装了好多东西,如果你有兴趣,自己反汇编 Windows内核吧
[解决办法]
GetKeyState function
...
...
...
Return value

Type: SHORT

The return value specifies the status of the specified virtual key, as follows:

If the high-order bit is 1, the key is down; otherwise, it is up.
If the low-order bit is 1, the key is toggled. The key is off and untoggled if the low-order bit is 0.

所以这里只用al就可以

热点排行