代码之家  ›  专栏  ›  技术社区  ›  gleisin-dev

如何使用事件KeyCode vb.net处理重音字符

  •  1
  • gleisin-dev  · 技术社区  · 2 年前

    我正在捕获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参数 )这里是键盘事件的实际处理发生的地方

    以下是事件的截图:

    0 回复  |  直到 2 年前