求 vb 的几个 GetAsyncKeyState(??)
你可以直接用VB内置的常数来代替这些数字嘛,这样就形象得多了:
GetAsyncKeyState(vbKeyUp) '上
GetAsyncKeyState(vbKeyDown) '下
GetAsyncKeyState(vbKeyRight) '右
GetAsyncKeyState(vbKeyLeft) '左
GetAsyncKeyState(vbKeyReturn) '回车
GetAsyncKeyState(vbKeyC) 'C键
要想知道各个键的常数是什么,可以在VB按F2打开对象浏览器,输入vbkey后按搜索,即可得知
VB中GetAsyncKeyState函数,得到键盘按键,清除键盘记录!
你不要简单地检测GetAsyncKeyState的返回值是否非零,因为如果在这个函数运行前指定的键已经被按过,则这个函数的返回值的位0为1;如果这个键目前处于按下状态,则位15为1。所以你检测位15是否为1就可以知道这个键是曾经被按过还是正在被按着:
If (GetAsyncKeyState(VK_SPACE) And &H8000) = &H8000 Then Call 事件A
还有一个API函数GetKeyState是只检测按键的当前状态的,但仍然要检测位15是否为1(位0为1表示开关键打开,即CapsLock、NumLock、ScrollLock键):
If (GetKeyState(VK_SPACE) And &H8000) = &H8000 Then Call 事件A
vb GetAsyncKeyState
Option Explicit
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Const VK_LSHIFT = &HA0
Private Sub Command1_Click()
Dim p As Long
p = GetAsyncKeyState(VK_LSHIFT)
MsgBox p
End Sub
对你问题回答:没有这个功能。这个函数需要你指定对某个键监视,判断是被按下或者弹起.
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer是什么意思啊?
VB声明
Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Long) As Integer
说明
判断函数调用时指定虚拟键的状态
返回值 Long,自对GetAsyncKeyState函数的上一次调用以来,如键已被按过,则位0设为1;否则设为0。如键目前处于按下状态,则位15设为1;如抬起,则为0。微软的win32手册指出:倘若输入焦点从属于与调用函数的输入线程不同的另一个输入线程,则返回值为0(例如,一旦另一个程序拥有焦点,则它应返回零)。证据显示,函数实际是在整个系统的范围内工作的
参数表
参数 类型及说明
vKey Long,欲测试的虚拟键的键码
注解
如指定了VK_LBUTTON 或 VK_RBUTTON,按钮的状态就会根据实际的按钮报告——无论是否曾用SwapMouseButton函数对鼠标的位置进行了交换。win32提供了额外的一些虚拟键码,比如VK_LSHIFT 和 VK_RSHIFT,以便在两个完全一样的键中区分出左右(也包括Ctrl 和 Alt)
C++中GetAsyncKeyState 能不能判断按任意键呢 就是它的参数怎么写
// 重写父类的PreTranslateMessage这个虚函数BOOL CXXX::PreTranslateMessage(MSG* pMsg) { //键盘按下 if (pMsg->message==WM_KEYDOWN) { //处理函数 } return CDialog::PreTranslateMessage(pMsg);} SHORT GetAsyncKeyState(int vKey);参数vKey是某个按键的虚拟码。功能 : 如果函数成功,则返回值指定此按键自上次上次调用GetAsyncKeyState后是否按下过,以及此按键当前是弹起的还是按下的。如果最高比特位被设置(就是被设为1),此按键就是按下的,如果最低位被设置,则此按键在上次调用GetAsyncKeyState之后(“又”)被按下过。但是你不应该依赖于之前的(按键)行为。所以GetAsyncKeyState只能判断具体某一个键是否被按下。
VB GetAsyncKeyState函数问题,高手进
GetAsyncKeyState函数返回的是指定虚拟键瞬时的状态值,它有四种返回值:
0 --- 键当前未处于按下状态,而且自上次调用GetAsyncKeyState后改键也未被按过;
1 --- 键当前未处于按下状态,但在此之前(自上次调用GetAsyncKeyState后)键曾经被按过;
-32768(即16进制数&H8000) --- 键当前处于按下状态,但在此之前(自上次调用GetAsyncKeyState后)键未被按过;
-32767(即16进制数&H8001) --- 键当前处于按下状态,而且在此之前(自上次调用GetAsyncKeyState后)键也曾经被按过。
也就是说,你只要简单的判断GetAsyncKeyState的返回值是否为0,只要不为0就表示键被按下了。如果想精确点就判断一下返回值的二进制数位第0位或第15位是否为0。
关于API中的GetKeyState
键盘码只有大写,你可以加一个检测shift键是否被按下来判断是否按下大写或小写字母
if (GetKeyState('A') < 0)
{
if(GetKeyState(VK_SHIFT) < 0)
MessageBox(NULL,"按下了A","T",NULL);
else
MessageBox(NULL,"按下了a","T",NULL);
}
无法找到指定DLL库文件的输出指令GetAsyncKeyState 怎么办?求解!求大神!
SHORT GetAsyncKeyState( intvKey // virtual-key code);
Windows NT/2000: Requires Windows NT 3.1 or later.
Windows
95/98: Requires Windows 95 or later.
Header: Declared in
Winuser.h; include Windows.h.
Library: Use User32.lib.
User32库文件是基本的、常用的,你遇到的错误一般不会出现,我没有遇到过。
可以尝试一下方法:
查毒;
更新库文件User32.lib,User32.dll;
修复文件系统。
----------------------我没有试验过。
c语言 GetAsyncKeyState好像只能同时按下两个键有用,第三个键就没用了,请大神帮忙决绝下
按键的同时检测如果实在游戏里面windows.h,stdio.hif(GetAsyncKeyState('A')&0x8000)//'A'c|=4;if(GetAsyncKeyState('D')&0x8000)//'D'c|=8;if(c&4&&c&8){printf("hello");c=0;}用了GetAsyncKeyStateapi的函数,这个函数的使用方法很有特点用了get监测按键按下,然后c分别和4,8来或运算,然后if再用与运算监测,确实按下了那两个按键之后执行什么,当然在加&&,可以监测多个按键
使用GetAsyncKeyState实现的全局热键怎么设组合键?
我用F10键做例子啦。。具体自己做
'模块中
Option Explicit
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public hnexthookproc As Long
Public Const HC_ACTION = 0
Public Const WH_KEYBOARD = 2
Public Sub UnHookKBD()
If hnexthookproc 0 Then
UnhookWindowsHookEx hnexthookproc
hnexthookproc = 0
End If
End Sub
Public Function EnableKBDHook()
If hnexthookproc 0 Then
Exit Function
End If
hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyKBHFunc, App.hInstance, 0)
If hnexthookproc 0 Then
EnableKBDHook = hnexthookproc
End If
End Function
Public Function MyKBHFunc(ByVal iCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
MyKBHFunc = 0 '讯息要处理
If iCode < 0 Then
MyKBHFunc = CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
Exit Function
End If
If wParam = 121 Then '侦测 有没有按到F10键
Form1.Check1.Value = 1 'Check选中
Call CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
Else
Call CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
End If
End Function
'以下在Form
Private Sub Form_Load()
Call EnableKBDHook
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call UnHookKBD
End Sub
使用GetAsyncKeyState来设置组合键,就是热键的设置
【VB声明】
Private Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Long) As Integer
【说明】
判断函数调用时指定虚拟键的状态
【返回值】
Long,自对GetAsyncKeyState函数的上一次调用以来,如键已被按过,则位0设为1;否则设为0。如键目前处于按下状态,则位15设为1;如抬起,则为0。微软的win32手册指出:倘若输入焦点从属于与调用函数的输入线程不同的另一个输入线程,则返回值为0(例如,一旦另一个程序拥有焦点,则它应返回零)。证据显示,函数实际是在整个系统的范围内工作的
【备注】
如指定了VK_LBUTTON 或 VK_RBUTTON,按钮的状态就会根据实际的按钮报告——无论是否曾用SwapMouseButton函数对鼠标的位置进行了交换。win32提供了额外的一些虚拟键码,比如VK_LSHIFT
和 VK_RSHIFT,以便在两个完全一样的键中区分出左右(也包括Ctrl 和
Alt)
【参数表】
vKey ---- Long,欲测试的虚拟键的键码
用循环,判断出每个键的状态