2012-02-09 37 views
0

私はアプリケーションのShiftキーのようなキー入力ではなく、 "a"のようなキーを送信したいと考えています。これはオンスクリーンキーボードのようなものです。このコードを使用しましたが、動作していません:非アクティブウィンドウにキーを送信しますか?

まだ私は前のウィンドウにキーを送信できません!

答えて

2

実際にはオンスクリーンキーボードのようなものではありません。キーストロークをアクティブウィンドウに送信します。 OSKは実際には入力フォーカスを受け取ることはできません。これは完全に設計によるものです。

SendKeysはアクティブなウィンドウにのみ入力を送信します。 Windows UIモデルでは、キーボード/マウス入力を受け取ることができる唯一のウィンドウです。これは、最初に 'アクティブな'/'フォーカスされた'ウィンドウの区別を持つ全体のポイントです。

達成しようとしていることを正確に知らなくても、問題の代替ソリューションを提案することは難しいです。いくつかのアイデア:

  • OSKを再実装する理由はありません。すべてのバージョンのWindowsにバンドルされているので、単にProcess.Startで起動しても問題ありません。

  • の場合では、このようなことを行う必要があります。そのデザインをコピーして、入力ウィンドウにフォーカスを得ることを避けてください。これにより、キーボードイベントを受け取るウィンドウが強制的にフォーカスを保持し、その入力を受け取ることができます。

  • また、SetForegroundWindow functionを呼び出して、キーボード入力を受け取るウィンドウをアクティブにすることもできますが、これはお勧めしません。

+0

はい私は画面キーボードを作成していますので、アプリケーションを最小化するとアクティブになるキーを非アクティブウィンドウに送信します。私はこれをどのようにすべきですか? Process.Startはこの問題とは関係がありません.GetWindowの使用は少しシンプルであるため、SetForegroundWindow関数はそれを難し​​くしています。ありがとう – Peyman

+0

@Peyman: 'Process.Start'は、世界で最も関連性の高いものです。あなたが探しているコードは 'Process.Start(" osk.exe ")'です。私が言及したように、Windowsには、すべてのバージョンのオンスクリーンキーボードアプリケーションが含まれています。あなたはそこにいることに頼り、それに頼って働くことができます。車輪を再構築しないでください。あなたのコメントは、質問が何をしているのかを再表示します。私はすでにそれがうまくいかない理由を説明しました。 –

+0

申し訳ありませんが、以前のアクティブなウィンドウにキーを送信するために何をすればいいのか分からず、オンスクリーンキーボードを正確に開発したいと考えています。どのようにProcess.Start( "osk.exe");私はこれを手伝うことができますか? – Peyman

関連する問題