Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net LoadKeyboardLayout不会更改屏幕键盘的UI_.net_Vb.net_Unicode_Tamil_On Screen Keyboard - Fatal编程技术网

.net LoadKeyboardLayout不会更改屏幕键盘的UI

.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

我已为我的应用程序激活了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等人)控制的,这是一个非常令人不快的api,很难从托管代码中使用。快速浏览显示没有明显支持更改布局的接口方法。这很难/不可能的最好提示可能是osk.exe没有做到这一点,这是您希望它具备的功能。我不得不建议您坚持使用语言栏。

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

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