我正在捕获CreateKeyboardHook事件按下的键盘键,它返回所有按下的键(使其成为键盘记录器,不存储或类似的东西,只打印到控制台)
Sub Main()
Try
Dim Kbd As New KeyboardStroke
Dim hookTask As Task = Task.Run(Sub()
Kbd.CreateKeyboardHook(Sub(keyPressed)
Console.Write(keyPressed)
End Sub)
Application.Run()
End Sub)
hookTask.Wait()
Catch ex As Exception
End Try
End Sub
我“遇到”了一个问题(我不知道这是否可以说是一个问题,因为它是一个监听键盘按键的功能),即重音问题。我做了几次搜索,试图将重音和字母组合在一起,但没有找到任何相关的东西(任何专门用于此的功能)
有什么办法处理这个问题吗?我想到了一个与记录最后按下的键有关的东西,如果该键是重音,它会等待下一个字母或按下的键,所以如果它是元音,它会将重音+元音组合在一起(因为元音是唯一有重音的字母,与辅音不同。)
但是,我无法应用或找到任何执行此“更正”的功能。
当然,这是一些特定的东西,比如pt-BR键盘布局(例如)
这个
CreateKeyboardHook
函数如下:
Public Sub CreateKeyboardHook(ByVal keyPressedCallback As Action(Of KeyPressed))
Me.keyPressedCallback = keyPressedCallback
Me.HookKeyboardDelegate = AddressOf HookKeyboardCallbackImplementation
Me.globalKeyboardHookId = User32.SetWindowsHookEx(WH_KEYBOARD_LL, Me.HookKeyboardDelegate, Me.currentModuleId, 0)
End Sub
为了更好地理解(避免使用大量代码,但如有必要,我会与您分享。)
-
这个
keyPressedCallback
参数在按下按键时执行(这是一种定义键盘事件发生时应该发生什么的方法)
-
这个
SetWindowsHookEx
方法用于安装键盘挂钩程序,它接收一些参数,如挂钩类型(在本例中
WH_KEYBOARD_LL
)指向每当发生键盘事件时将被调用的函数的指针(
Hook键盘代表
),当前模块的手柄,以及与键盘挂钩相关联的线程的手柄。
-
这个
HookKeyboardCallbackImplementation
方法是每当发生键盘事件时都会调用的函数。它接收事件信息,如密钥代码(
nCode
),消息类型(
wParam
)以及指向包含密钥信息的结构的指针(
l参数
)这里是键盘事件的实际处理发生的地方
以下是事件的截图: