加载键盘布局不会更改屏幕键盘的 UI



我已经为我的应用程序激活了 Windows 屏幕键盘,并在显示屏幕键盘之前将键盘布局更改为泰米尔语,使用以下代码:

Private Const KLF_ACTIVATE As Integer = 1
Dim oskProcess As System.Diagnostics.Process
Private Sub ProdNameText_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles ProdNameText.GotFocus
        LoadKeyboardLayout("00000449", KLF_ACTIVATE)
        oskProcess = Process.Start("osk.exe") 
End Sub

我可以通过以下方式在文本框中输入泰米尔语:

  • 按键盘上的键
  • 点按屏幕键盘中的键

但屏幕键盘仅以英文显示字符。当我单击语言栏中的泰米尔语时,屏幕键盘中的键会显示泰米尔语字符。

当以编程方式完成更改时,为什么屏幕键盘的字符不会根据当前键盘布局的变化而更改?

这是因为键盘布局是每个进程的属性。 您只更改了进程的键盘布局,而没有更改 osk.exe 的键盘布局。

没有 winapi 函数来更改另一个进程的键盘布局。 鉴于语言栏知道如何做到这一点,它只提供了一个提示,表明这是可能的,但这是一个很好的秘密。 语言栏通过文本服务框架 api(ItfLangBarMgr et al)控制,这是一个非常令人不快的 api,很难从托管代码中使用。 快速浏览显示没有明显支持更改布局的界面方法。 可能最好的提示是,osk.exe 不这样做,这是你期望它拥有的功能。 我不得不建议你坚持使用语言栏。

最新更新