Do
DoEvents
dl& = GetKeyboardState(Key(0)) '获取当前按键状态——这句是什么用意?
For i = 0 To 254
If Key(i) And &H80 Then '如某个键当时按下,则位7为1——这句怎么理解?
KeyCode& = MapVirtualKey(i, 0)
If KeyCode = 1 Then Exit Do
End If
Next
Loop 在你的代码中加入循环检测按键
用法
DO
IF chkKeyDown( "Esc") THEN
DEBUG.PRINT "按下了ESC键"
EXIT DO
ENDIF
LOOP
下面是模块中的代码
Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Private Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long
Dim arrKeyName(255) As String, bReadKeyNameFlag As Boolean
Public Function chkKeyDown(ByVal sKeyName As String) As Boolean
Dim r As Long
Dim Key(0 To 255) As Byte
Dim KeyCode As Long
If Not bReadKeyNameFlag Then Call LoadKeyName '如果没有载入键名,载入键名
KeyCode = KeyNameToCode(sKeyName)
r = GetKeyboardState(Key(0)) '获取当前按键状态
If Key(KeyCode) And &H80 Then '如果指定键按下
chkKeyDown = True
End If
End Function
Private Sub LoadKeyName()
Dim iCode As Long
Dim sTxt As String
For iCode = 1 To 127
sTxt = String(128, Chr(0))
GetKeyNameText MapVirtualKey(iCode, 0) * &H10000, sTxt, 128
If InStr(sTxt, Chr(0)) > 0 Then
sTxt = Left(sTxt, InStr(sTxt, Chr(0)) - 1)
arrKeyName(iCode) = sTxt
End If
Next
For iCode = 1 To 127
Debug.Print iCode, arrKeyName(iCode), Len(arrKeyName(iCode))
Next
bReadKeyNameFlag = True
End Sub
Private Function KeyNameToCode(ByVal sKeyName As String) As Long
Dim iCode As Long
For iCode = 1 To 127
If arrKeyName(iCode) = sKeyName Then
KeyNameToCode = iCode
Exit For
End If
Next
End Function
指定按键名要注意大小写
常用按键
IF chkKeyDown( "Tab") THEN debug.print "按下Tab键"
IF chkKeyDown( "Enter") THEN debug.print "按下回车键"
IF chkKeyDown( "Shift") THEN debug.print "按下Shift键"
IF chkKeyDown( "Ctrl") THEN debug.print "按下Ctrl键"
IF chkKeyDown( "Alt") THEN debug.print "按下Alt键"
IF chkKeyDown( "Caps Lock") THEN debug.print "按下大小写转换键"
IF chkKeyDown( "Space") THEN debug.print "按下空格键"
IF chkKeyDown( "Num 1") THEN debug.print "按下数字键盘1键"
IF chkKeyDown( "Num 9") THEN debug.print "按下数字键盘9键"
IF chkKeyDown( "F1") THEN debug.print "按下F1键"
IF chkKeyDown( "F12") THEN debug.print "按下F12键"
非常好,谢谢你的耐心解答。 天之雨露 发表于 2009-6-23 05:28
DoEvents能实现你要的功能,具体参见以下网址,灵活运用http://www.cnblogs.com/todd/archive/2006/05/10/3 ...
处理按下Esc键
If objSelect Is Nothing Then
If CheckKey(&H1B) = True Then
Exit Sub
Else
do something
End If
End If 加个 if,判断一下esc就可以了。
页:
1
[2]