2011-09-10 14 views
0

ホットキーが定義された自宅のアプリ(マスター)があります。私は別の外部アプリ(コントロール)でアプリを自動化する必要があります。私はマスターアプリを再構築することはできません、それは実行されて、すでにインストールされていると混乱することはできません。私のアプリはSendKeysやSendInputから送信されたキーストロークを認識しませんが、キーボードからは

キーボードでホットキーを使用すると、チャームのように機能します。

私は、SendKeys.SendWaitまたはSendKeys.Sendを使用してコマンドを送信します。私のコードは他のアプリケーション(メモ帳など)でうまく動作しますが、私のカスタムアプリケーションであるMasterでは動作しません。これは、いくつかの低レベルのビデオコントロール...何がカバーの下にあるか知っている。

私は何かより高いレベルを得る必要があります。彼らはキーボード自体から来ているかのようにキーストロークを送ることができる必要があります。私は、コンピュータがキーを送信する物理的なキーボードとキーを送信する私のアプリケーションとを区別できるようにしたくありません。

何が違うのですか?

+0

これがあなたの問題を解決できるかどうかはわかりませんが、私には決して失敗しませんでした。[AutoIt](http://www.autoitscript.com/site/autoit/) – Marco

+0

@Marco。アドバイスをいただきありがとうございます。私たちは実際にAutoHotKeyを明日使ってみるつもりですが、私は本当に問題が何であるか把握したいと思っています。 – Jason

+0

あなたはVistaにいますか? 「SendKeysクラスは、.NET Framework 3.0がWindows Vista上で動作するアプリケーションで使用できるように更新されています。 –

答えて

0

問題はSendKeysではありませんでした。

私はSendKeys.Send、SendKeys.SendWait、SendInput、およびkeybd_eventを試しました。

私は後で、アプリケーションを起動してからキーストロークを送信するまでの時間が短すぎることを認識しました。私は200ミリ秒待っていたが、これを500ミリ秒に上げるだけで問題は解決した。

埋め込みビデオプレーヤーのため、アプリケーションの描画に時間がかかりました。それを300ms与えれば、私が送るキーストロークの準備ができました。

+0

FWIW、あなたはまだ競争状態になっています。 –

+0

合意。それは12時間後に始まるトレードショーで私たちを得るでしょうが、最終的にはアプリケーション自体に統合されます。 – Jason

+1

Process.WaitForInputIdle()を使用します。 –

関連する問題