1

我已经为我的应用程序激活了 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

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

  • 在我的键盘上按下键
  • 单击屏幕键盘中的键

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

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

4

1 回答 1

1

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

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

于 2013-01-26T13:27:28.593 回答