.net LoadKeyboardLayout不会更改屏幕键盘的UI
我已为我的应用程序激活了Windows屏幕键盘,并在显示屏幕键盘之前使用以下代码将更改为泰米尔语:.net LoadKeyboardLayout不会更改屏幕键盘的UI,.net,vb.net,unicode,tamil,on-screen-keyboard,.net,Vb.net,Unicode,Tamil,On Screen Keyboard,我已为我的应用程序激活了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.GotF
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等人)控制的,这是一个非常令人不快的api,很难从托管代码中使用。快速浏览显示没有明显支持更改布局的接口方法。这很难/不可能的最好提示可能是osk.exe没有做到这一点,这是您希望它具备的功能。我不得不建议您坚持使用语言栏。这是因为键盘布局是每个进程的属性。您只更改了进程的键盘布局,而没有更改osk.exe的键盘布局 没有winapi函数来更改另一进程的键盘布局。鉴于语言栏知道如何做,它只提供了一个提示,说明这是可能的,但这是一个相当保密的秘密。语言栏是通过文本服务框架api(ItfLangBarMgr等人)控制的,这是一个非常令人不快的api,很难从托管代码中使用。快速浏览显示没有明显支持更改布局的接口方法。这很难/不可能的最好提示可能是osk.exe没有做到这一点,这是您希望它具备的功能。我得建议你坚持使用语言栏