vb6使用API 抑制键盘笔触吗? (制作热键)

问题描述 投票:0回答:1

我已经搜索过,但似乎找不到答案,因此,我们将不胜感激。

我想创建一个热键,但是当按下热键时,我不想显示实际的“字符”,而只是要执行的操作。

例如,我有这个:

 Private Declare Function GetAsyncKeyState Lib "user32" _
 (ByVal vKey As KeyCodeConstants) As Long

 Private Const VK_A = &H41

 Private Sub keyboardTimer001_Timer()
    If KeyDown(VK_A) Then
       ' do my stuff, but DONT DISPLAY the letter "A"
    End If
 end sub

因此,这基本上只是一个计时器(间隔1),用于检查异步键盘。如果检测到按下字母“ a”,我将执行一个操作。但是我希望它不打印字母“ a”就可以做到这一点。我如何从键盘缓冲区中删除键/防止其显示? (旁注-不知道像'PeekMessage'这样的东西是否可以工作-如果这样-有人知道我在哪里可以找到一个好的vb6代码示例,在这里我可以窥视'ctrl + a'或'ctrl + alt + a'之类的东西等等),然后清除缓冲区,然后执行我的操作?)

谢谢!

vb6
1个回答
0
投票

您可以结合使用RegisterHotKey和PeekMessage。以下代码定义了Ctrl-A来执行您的操作:

主要形式

Option Explicit

Private Done As Boolean

Private Sub Form_Activate()
   Done = False
   RegisterHotKey Me.hWnd, &HBBBB&, MOD_CONTROL, vbKeyA
   ProcessMessages
End Sub

Public Sub ProcessMessages()
   Dim Message As Msg

   Do While Not Done
      WaitMessage

      If PeekMessage(Message, Me.hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
         MsgBox "This is my action"
      End If

      DoEvents
   Loop
End Sub

Private Sub Form_Unload(Cancel As Integer)
   Done = True
   Call UnregisterHotKey(Me.hWnd, &HBBBB&)
End Sub

模块

当然,您需要定义Win API。因此,在模块中,放置以下代码:

Option Explicit

Public Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long) As Long
Public Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Public Declare Function WaitMessage Lib "user32" () As Long

Public Const MOD_NONE = &H0
Public Const MOD_ALT = &H1
Public Const MOD_CONTROL = &H2
Public Const MOD_SHIFT = &H4
Public Const MOD_WIN = &H8
Public Const PM_REMOVE = &H1
Public Const WM_HOTKEY = &H312

Public Type POINTAPI
   x As Long
   y As Long
End Type

Public Type Msg
   hWnd As Long
   Message As Long
   wParam As Long
   lParam As Long
   time As Long
   pt As POINTAPI
End Type
© www.soinside.com 2019 - 2024. All rights reserved.