2011-12-20 17 views
1

これで、WatiNでテストを実行しています。私はSendKeysメソッドを使用しています。 MSDNのウェブサイトによると、私は次のように入力することができます:複数のキーを送信するWatNN

System.Windows.Forms.SendKeys.SendWait("{LEFT 2}"); 

これは左に2回入力されます。これはうまくいきませんが、アプリケーションでキーを押すたびに時間が必要だと思います。私はプログラムを必要とすることをするために、各キー押しの間にThread.Sleepを使用して、読んでいることを確認しました。 これを行うにはより効率的/適切な方法がありますか?これは私の現在のメソッドのコードです:

System.Windows.Forms.SendKeys.SendWait("{LEFT}"); 
Thread.Sleep(500); 
System.Windows.Forms.SendKeys.SendWait("{LEFT}"); 
Thread.Sleep(500); 
System.Windows.Forms.SendKeys.SendWait("{ENTER}"); 
+0

デバッグしようとしているときにこれに問題がありました。私が思っていたことは、sendkeyがアクティブなウィンドウに送信していると思います。私はブレークポイントを設定するので、アクティブウィンドウはVisual Studioに変更されました。 –

+0

これは助けるかもしれません... http://stackoverflow.com/questions/5597848/key-strokes-in-watin –

+0

ありがとう、しかし私の問題は動作しません。 keypressesは読んでいる、ちょうど私はそれを行うよりスマートな方法があるかどうか疑問に思っていた。 –

答えて

2

残念ながら、私はそこにあるとは思いません。 MSDNによるとのSendKeysでタイミングの問題があります。

のSendKeysクラスは、いくつかの 開発者は回避しなければならなかったタイミングの問題、影響を受けやすいです。更新された実装はまだタイミング問題の影響を受けやすい ですが、少し速く、 には回避策を変更する必要があります。

SendKeysクラスは先に実装した を使用しようとしますが、失敗した場合は新しい 実装を使用します。

結果として、SendKeysクラスは異なるオペレーティングシステム上で異なる動作をする可能性があります( )。 また、SendKeysクラス が新しい実装を使用する場合、SendWaitメソッドは、 メッセージが別のプロセスに送信されたときに処理されるのを待機しません。 オペレーティングシステムに関係なく、アプリケーションが一貫した動作に依存する場合、 app.configファイルに次のアプリケーション設定を追加して、SendKeysクラスに新しい 実装を使用させることができます。

<appSettings> 
    <add key="SendKeys" value="SendInput"/> 
</appSettings> 

代わりに値を使用して、以前の実装を使用するために "JournalHookを" のSendKeysクラスを強制します。

実装を変更して、結果に変更があるかどうかを確認できます。

これに代えて、このpostを入力するだけでThread.Sleep(0);を入力してください。最も洗練されたソリューションではありませんが、動作すれば500ms以上の高速化が可能です。

+0

私は知らない、スリープ(0)は私のために働いていない。彼らはまだ読まない。しかし、私は本当にこれを行うための良い方法ではないように見えます。 –

関連する問題