2011-11-01 2 views
5

저는 작업을 위해 자동화 프로그램에서 SendKeys를 사용하고 있습니다. 나는 함께 진행해 왔고, 지금 내가 만든 모든 버그를 철저히 제거하려하고있다 :-)caps lock을 프로그래밍 방식으로 해제하십시오.

그 중 하나는 SendKeys.Send ("Test")를 사용할 때 CapsLock 이 켜져 있으면 "테스트"와 반대로 "테스트"가 생성됩니다.

bool tmp = Control.IsKeyLocked(Keys.CapsLock); 
if (tmp) 
{ 
    keybd_event(0x14, 0x45, KEYEVENTF_EXTENTEDKEY, (UIntPtr)0); 
    keybd_event(0x14, 0x45, KEYEVENTF_EXTENTEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0); 
    //Application.DoEvents(); <-Testing. 
} 

그리고 즉시에서 SendKeys를 사용하는이 텍스트 보낼 :

나는 CAPSLOCK 상태를 감지하려고 시도하고 필요한 경우를 전환하려면 다음 코드를 사용했습니다

SendKeys.SendWait("This Is An Over Capitalized Test String"); 

을 어느 "아직까지는 시험용 스리 팅이 필요하지 않습니다"라고 나와 있습니다.

이 문제를 해결할 수있는 방법이 있습니까?

답변 됨! 그냥 다른 사람에 대해 명확히하기 위해, 문제가

SendKeys.SendWait("{CAPSLOCK}" + text); 

를 사용하여 해결되었습니다 내가 먼저 사용하려고 :

SendKeys.SendWait("{CAPSLOCK}"); 
SendKeys.SendWait("This Is An Over Capitalized Test String"); 

전혀 작동하지 않았다 어느.

+1

"SendKeys.Send"{CAPSLOCK} Test "? – V4Vendetta

답변

9

이 방법이 유용합니까?

if(Control.IsKeyLocked(Keys.CapsLock)) 
     SendKeys.SendWait("{CAPSLOCK}This Is An Over Capitalized Test String"); 
    else 
     SendKeys.SendWait("This Is An Over Capitalized Test String"); 
+0

난 그냥 이것을 테스트하고 전혀 CapsLock 키의 상태를 변경하지 않습니다. 다른 방법으로는 CAPS LED가 꺼지 긴하지만이 LED는 꺼내지도 않습니다. – HeWhoWas

+0

그 진술을 수정하겠습니다. 코드를 작성한 그대로 사용하면 문제가 해결됩니다. SendKeys.SendWait ("{CAPSLOCK}")를 호출했습니다. 그런 다음 다른 줄에 문자열을 보냅니다. 핵심은 보내는 텍스트의 나머지 부분과 동일한 SendKeys 문에서 CAPSLOCK 토글을 사용하는 것입니다. 감사! – HeWhoWas

+0

그 이유는 첫 번째 Sendkey가 완료된 후에 Sendkey의 CAPSLOCK이 추가 CAPSLOCK을 전송하기 때문입니다. 디버그 쓰기를 추가하여 어떤 일이 발생하는지 확인하십시오. – Martin

0

나는 종종 왼쪽 Shift와 Tab 사이를 전환해야하는 응용 프로그램이 있습니다. 내 키보드에서 CAPSLOCK은이 두 키 사이에 있으며 지금은 실수 한 다음 Tab 대신 CAPSLOCK을 입력합니다. 내 솔루션은 CAPSLOCK을 뒤집어 Tab을 대신 제출하는 것입니다. 놀랍게도 스택 오버플로가 발생할 때까지 프로그램이 반복됩니다. 나는 CAPSLOCK 키가 두 번 보내는 것을 알았습니다. 이것은 내 마지막 해결책입니다.

Dim CapsLockProg As Integer = 0 ' after Send Capslock arrives 2 times!!!!! 
Private Sub Description_KeyDown(sender As Object, e As KeyEventArgs) Handles Description.KeyDown 
    If e.KeyCode = Keys.Capital Then 
     If CapsLockProg < 2 Then 
      CapsLockProg += 1 
      If CapsLockProg = 1 Then 
       Windows.Forms.SendKeys.SendWait("{TAB}{CAPSLOCK}") 
      'Else 
      ' ignore 2nd Capslock 
      End If 
     Else 
      CapsLockProg = 0 
     End If 
    End If 
    If e.KeyCode = Keys.Tab Then 
    rest of code