我已经为我的应用程序激活了Windows On键盘,并在显示屏幕键盘之前将keyboard layout更改为Tamil,使用以下代码:
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
我可以通过以下方式在文本框中输入泰米尔语:
但屏幕键盘仅显示英文字符。当我单击语言栏中的泰米尔语时,屏幕键盘上的键显示泰米尔语字符。
为什么当以编程方式完成更改时,屏幕键盘上的字符不会根据当前键盘布局的更改而改变?
答案 0 :(得分:1)
这是因为键盘布局是每个进程属性。您只更改了进程的键盘布局,而不是osk.exe。
没有用于更改其他进程的键盘布局的winapi功能。鉴于语言栏知道如何做它只提供了一个可能的提示,但它是一个非常保守的秘密。语言栏是通过Text Services Framework api(ItfLangBarMgr等)控制的,这是一个非常令人不愉快的api,很难从托管代码中使用。快速浏览一下,显示没有明显支持更改布局的界面方法。可能最好的暗示,这很难/不可能是osk.exe没有这样做,这是你期望它拥有的一个功能。我不得不建议你坚持使用语言栏。