2016-10-03 11 views
0

msvcrt.getch()メソッドを使用してkeypressをキャッチするためにmsvcrtパッケージをPythonで使用できるようにしたいが、ターミナルウィンドウにフォーカスが必要なように見える働くこれを回避する方法はありますか?端末ウィンドウがフォーカスにないときにMSVCRTを使用してPythonでWindowsでKeypressesをキャッチ

+0

入力だけで、これまで最前面ウィンドウになりますので、明らかに 'getch'を呼び出すプロセスは、フォアグラウンド・プロセスでなければなりません。ルールを変更することはできません。しかし、あなたは解決しようとしている実際の問題については尋ねませんでした。それは何ですか? – IInspectable

+0

さて、キーボードのキーを押したときに、LEDストリップを制御しているArduinoにPythonがメッセージを送信しているので、ターミナルウィンドウにフォーカスがないときでもキーの押下を検出できるようにしたい。ウィンドウをバックグラウンドで永続化する方法はありますか? –

+0

* "ウィンドウをバックグラウンドで永続化する方法はありますか?" - Uhm ...いいえ、しかし、あったとしても、ウィンドウを前面に持ってこないでしょう( 'getch() '意味のあることをする)。フォアグラウンドプロセスを使用せずに入力を監視する場合は、[Raw Input](https://msdn.microsoft.com/en-us/library/windows/desktop/ms645536.aspx)のようなものが必要です。 [低レベルキーボードフック](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644985.aspx)を参照してください。 – IInspectable

答えて

0

@IInspectableのようにCtypes用のPythonラッパーが見つかりました。 low_level Keyboardフックを素敵なモニタークラスでラップします。

https://github.com/ethanhs/pyhooked

+0

[低レベルキーボードフック](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644985.aspx)ドキュメントのメモをお読みになりましたか? * "[...]アプリケーションが低レベルのフックを使用する必要があるほとんどの場合、**未処理の入力を監視する必要があります。**これは、未処理の入力が対象となるマウスとキーボードメッセージを非同期に監視できるためですRaw入力の詳細については、[Raw Input](https://msdn.microsoft.com/en-us/library/ms645536(vs.85).aspx)を参照してください。 "* – IInspectable

+0

私はここでLEDを点灯させています。宇宙への答えを正確に計算するわけではありません。私の実装は現在十分に速いようです。 –

+0

お勧めはあなたのアプリケーションにのみ関連していません。低レベルのキーボードフックは、システム全体にパフォーマンスの影響を与えます。すべてのキーボード入力に対して、2つのコンテキストスイッチが追加され、フックがイベントを処理するのにかかる時間も加算されます。 Stack OverflowはQ&Aサイトなので、誰かがあなたの質問を見つけるかもしれません。**彼らは**宇宙への答えを計算しています**。 – IInspectable

関連する問題