VB 获取KeyCode问题
答案:1 悬赏:20 手机版
解决时间 2021-02-04 20:10
- 提问者网友:我们很暧昧
- 2021-02-04 08:36
VB 获取KeyCode问题
最佳答案
- 五星知识达人网友:轻雾山林
- 2021-02-04 09:38
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
If Shift = 2 Then
MsgBox "Ctrl is pressed!"
Else
MsgBox "Ctrl is not pressed!"
End If
End If
End Sub
使用键盘钩子
新建一个模块,加入如下代码:
Private 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
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Dim hHook As Long
Public Sub BeginHook()
'调用API函数设置钩子函数,2表示键盘钩子
hHook = SetWindowsHookEx(2, AddressOf HookFunc, 0, App.ThreadID)
End Sub
Public Function HookFunc(ByVal ncode As Long, ByVal Key As Long, ByVal Shift As Long) As Long
'如果按键是回车就调用Form里面的函数,13是VK_ENTER的值
If Key = 13 Then
Form1.OnEnter Shift
'返回1表示此消息已经被处理过,并且不调用CallNext...屏蔽后续处理
HookFunc = 1
Else
'不是回车键就调用默认的处理
HookFunc = CallNextHookEx(hHook, ncode, wParam, lParam)
End If
End Function
Public Sub EndHook()
'调用API卸载掉键盘钩子
UnhookWindowsHookEx hHook
End Sub
然后在Form里面增加如下代码:
Private Sub Form_Load()
' 设置钩子函数
BeginHook
End Sub
Private Sub Form_Unload(Cancel As Integer)
' 退出前卸载掉钩子
EndHook
End Sub
' 钩子函数会调用此函数通知按键按下
Public Sub OnEnter(ByVal Shift As Long)
MsgBox Shift
End Sub
根据Shift判断Ctrl的状态就可以了。
If KeyCode = 13 Then
If Shift = 2 Then
MsgBox "Ctrl is pressed!"
Else
MsgBox "Ctrl is not pressed!"
End If
End If
End Sub
使用键盘钩子
新建一个模块,加入如下代码:
Private 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
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Dim hHook As Long
Public Sub BeginHook()
'调用API函数设置钩子函数,2表示键盘钩子
hHook = SetWindowsHookEx(2, AddressOf HookFunc, 0, App.ThreadID)
End Sub
Public Function HookFunc(ByVal ncode As Long, ByVal Key As Long, ByVal Shift As Long) As Long
'如果按键是回车就调用Form里面的函数,13是VK_ENTER的值
If Key = 13 Then
Form1.OnEnter Shift
'返回1表示此消息已经被处理过,并且不调用CallNext...屏蔽后续处理
HookFunc = 1
Else
'不是回车键就调用默认的处理
HookFunc = CallNextHookEx(hHook, ncode, wParam, lParam)
End If
End Function
Public Sub EndHook()
'调用API卸载掉键盘钩子
UnhookWindowsHookEx hHook
End Sub
然后在Form里面增加如下代码:
Private Sub Form_Load()
' 设置钩子函数
BeginHook
End Sub
Private Sub Form_Unload(Cancel As Integer)
' 退出前卸载掉钩子
EndHook
End Sub
' 钩子函数会调用此函数通知按键按下
Public Sub OnEnter(ByVal Shift As Long)
MsgBox Shift
End Sub
根据Shift判断Ctrl的状态就可以了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯