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 に答える