私のキーボードには、ギリシャ語と英語の2つのキーボード言語があります。どのようにして現在のキーボード言語を取得できますか? 私のためのトリックを行うことができる有用なライブラリがありますか? 私はpython 3.5.2、Windows 10を使用しています現在のキーボードの言語をPythonで検出する方法
答えて
ライブラリを利用した以下のアプローチが役に立ちます。
# My keyboard is set to the English - United States keyboard
>>> import ctypes
# For debugging Windows error codes in the current thread
>>> user32 = ctypes.WinDLL('user32', use_last_error=True)
>>> curr_window = user32.GetForegroundWindow()
>>> thread_id = user32.GetWindowThreadProcessId(curr_window, 0)
# Made up of 0xAAABBBB, AAA = HKL (handle object) & BBBB = language ID
>>> klid = user32.GetKeyboardLayout(thread_id)
67699721
# Language ID -> low 10 bits, Sub-language ID -> high 6 bits
# Extract language ID from KLID
>>> lid = klid & (2**16 - 1)
# Convert language ID from decimal to hexadecimal
>>> lid_hex = hex(lid)
'0x409'
# I switched my keyboard to the Russian keyboard
>>> curr_window = user32.GetForegroundWindow()
>>> thread_id = user32.GetWindowThreadProcessId(curr_window, 0)
>>> klid = user32.GetKeyboardLayout(thread_id)
68748313
# Extract language ID from KLID
>>> lid = klid & (2**16 - 1)
# Convert language ID from decimal to hexadecimal
>>> lid_hex = hex(lid)
'0x419'
あなたはギリシャ語(0x408
)と同じ手順、またはあなたが検出したいのですが、他の言語に従うことができます。あなたが興味があれば、lid_hex
が入力言語で与えられる可能性のあるすべての16進値のうち、here is a plain-text listとhere is Microsoft's listです。
LCIDはthis formatに保存されています(私のコードのコメントに記載されています)。
キーボードで言語を切り替えるたびに、GetKeyboardLayout(thread_id)
に電話していることを確認してください。
EDIT:コメント欄で述べたように@furas
、これはシステムに依存あります。 Windows 10以外のOSにコードを移植する場合(LCIDがそれ以降変更された場合はWindowsの以前のバージョンであっても)、この方法は期待どおりに機能しません。
EDIT 2:klid
の
私の最初の説明は正しくありませんでしたが、@のeryksunのコメントのおかげで、私はそれを修正しました。
'user32 = ctypes.WinDLL( 'user32'、use_last_error = True)'に切り替えます。また、[GetKeyboardLayout'](https://msdn.microsoft.com/en-us/library/ms646296)の 'HKL'結果は、低ワード(16ビット)の言語識別子を持っています。 'klid = hkl&(2 ** 16-1)'。言語識別子は、下位10ビットの主言語IDと、上位6ビットの副言語IDとからなる。 0x409の言語IDは9( 'LANG_ENGLISH')、サブ言語IDは1(' SUBLANG_ENGLISH_US')です。 – eryksun
汎用性のためにここに 'use_last_error'が追加されました。それは、関数が呼び出されてから失敗したときにエラーが発生するまでの間にスレッドの最終エラー値を変更する場合に備えて、スレッドの最後のエラー値を保護します。エラー値は 'ctypes.get_last_error()'として利用でき、 'GetLastError'を直接呼び出すよりも信頼性が高いです。 'WinDLL'に切り替える主な目的はあなたのモジュールを他のモジュールから分離することです。 'windll'は関数ポインタをキャッシュするライブラリをキャッシュします。これは、少なくとも1つのモジュールが関数のプロトタイプを、別のモジュールが期待するものとは異なって定義するとき、つまり' windll'が悪い設計であるときに競合を引き起こします。 – eryksun
あなたの 'klid'の説明は間違っています。 0x4090409は0xAAABBBBではなく、言語IDは0xBBBB、サブ言語IDは0xAAAです。言語IDは、言語IDがこのワードの下位10ビットであり、サブ言語IDがこのワードの上位6ビットである低ワード(16ビットまたは4桁の16進数)、すなわち0xBBBBである。 – eryksun
- 1. SilverStripe翻訳モジュールで現在の言語の方向を検出
- 2. 現在の入力言語を検出する
- 3. AndroidでキーボードのIME言語を検出する
- 4. Androidで現在の言語を取得する方法は?
- 5. Odoo/Pythonでの言語ブラウザの検出
- 6. 特定の単語の出現回数をPythonで検出する方法
- 7. C言語で現在の言語を取得する
- 8. Python言語でのRGBカラー検出
- 9. iOS:現在のアプリケーション言語を取得する方法
- 10. アンドロイドの設定方法キーボードの言語
- 11. ノードJS - ユーザ言語の検出方法
- 12. Windowsで現在アクティブな言語を検索する
- 13. ジャンゴ:現在の言語
- 14. vb6を使用して現在のキーボードの言語を確認する方法は?
- 15. Django CMSのタグで言語を検出する方法
- 16. 現在のキーボード(現在のIME)をADB経由で使用する方法
- 17. 「現在の言語:auto;現在objective-c」とは何ですか?
- 18. jQueryで現在のページのメディアタイプを検出する方法
- 19. 現在のAndroidキーボードの言語を確認してください
- 20. qmake言語、現在のフォルダ名の取得方法は?
- 21. PHPで現在のブートストラップクラス名を検出する方法は?
- 22. 言語検出
- 23. EditTextの仮想キーボードのデフォルト言語を設定する方法
- 24. Laravel 5の言語設定を検出する方法
- 25. Yesodテンプレート言語で現在の時刻を表示する方法は?
- 26. Eclipseキーボード言語
- 27. 現在のマウスカーソルタイプをbashまたはpythonから検出する方法
- 28. 現在の時刻を言葉で表現する方法
- 29. キーボード言語をプログラムで変更する方法
- 30. ビューメソッド内の現在のURLを検出する方法
itシステム情報Windows/Linux/Mac。それはあなたが使用するシステム上depeondsすることができます。 – furas
@furas windows! –
おそらく、別のSOの質問への[回答](http://stackoverflow.com/a/3425316/5209610)が役に立ちます(その投稿の両方の回答を参照してください)。 Unix SEサイトでこれに別の良い[回答](http://unix.stackexchange.com/a/295271)があります。 –