2011-12-20 2 views
1

Ok 그래서 WatiN에서 테스트를 실행하고 SendKeys 메서드를 사용하고 있습니다. MSDN 웹 사이트에 따르면 다음과 같이 입력 할 수 있습니다 :여러 키 누르기 보내기 WatiN

System.Windows.Forms.SendKeys.SendWait("{LEFT 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)이 작동하지 않습니다. 그들은 여전히 ​​읽지 않습니다. 그러나 실제로이 작업을 수행하는 데 더 좋은 방법이없는 것처럼 보입니다. –