关于User32.dll里的GetKeyState和GetKeyboardState的函数调用问题【已解决】
本帖最后由 editcue 于 2011-4-23 15:16 编辑我想做一个实时显示当前按键状态的软件,就是监视键盘按键是否为按下状态。
希望能在在录制视频教程时,按下按键,在屏幕即时显示当前按键。
所以需要用到一个全局和hook。
我在MSDN找到了user32.dll,里面有这样的两个函数:
MSDN:GetKeyState
百度百科:GetKeyState
MSDN:GetKeyboardState
百度百科:GetKeyboardState
写了下面一段脚本:$User32 = DllOpen("user32.dll")
$KeyState=DllCall($User32, "short", "GetKeyState", "long", 144)
$KeyboardState=DllCall($User32,"long","GetKeyboardState","long",144)
MsgBox(0,"1",$KeyState,2)
WinWaitClose("1")
MsgBox(0,"1",$KeyboardState,2)
DllClose($User32)问题:
为什么运行上面代码没有任何返回值呢?
试过Num Lock打开状态,没有任何返回值。后面的“虚拟键码参数”,试过“十进制”和“十六进制”的都不行。
到底是哪里出错呢? 干么非要用dll直接写个代码就是了 干么非要用dll直接写个代码就是了
haijie1223 发表于 2011-4-22 19:05 http://www.autoitx.com/images/common/back.gif
说的是直接用UDF的_IsPressed函数吗?刚刚看了一下_IsPressed的源代码Func _IsPressed($sHexKey, $vDLL = 'user32.dll')
; $hexKey must be the value of one of the keys.
; _Is_Key_Pressed will return 0 if the key is not pressed, 1 if it is.
Local $a_R = DllCall($vDLL, "short", "GetAsyncKeyState", "int", '0x' & $sHexKey)
If @error Then Return SetError(@error, @extended, False)
Return BitAND($a_R, 0x8000) <> 0
EndFunc ;==>_IsPressed原来是用GetAsyncKeyState函数。。。汗啊。折腾了这么久,原来已经有Defined了。
谢谢啊。 哇!~....真的是高手
页:
[1]