2014-07-18 1 views
0

리그 오브 레전드 (Legends of Legends)의 작은 부가 기능을 사용하여 플레이어가 내 양식의 체크 박스를 클릭 할 수있게되었고, 체크 박스 기능이 검색 창에서 클릭되어 자동으로 삭제됩니다. 이미 LoL 클라이언트의 기능) 그리고 플레이어가 두 번째 형식을 통해 해당 그룹에 지정한 모든 챔피언의 이름을 입력합니다. 텍스트 (예) 12345 그러나,이 같은 결과를 많이 받았는데 : 1231234545.C# Windows Forms - StringBuilder를 사용하여 큰 문자열을 생성 한 다음 SendKeys를 사용하여 입력합니다. 하나의 통화에서 두 번 자주 발생합니까?

을 내가 무엇을 시도했다 :

  • 내가 추가하려고했습니다 ctrl-a + sendkey를 사용하는 백 스페이스. 검색 막대를 클릭 할 때 항상 물건을 삭제하는 것은 아니기 때문에! 그러나 아무것도 변경하지 않았다
  • 나는 실제 문자열 (12345)을 입력하고 체크 박스에만 ctrl-a 유형의 코드를 주석 처리했다. 그런 다음 입력하고 붙여 넣을 체크 상자를 클릭 한 검색 막대보다 긴 문자열을 쓴 및 텍스트를 강조 표시 할 경우 (텍스트를 클릭 할 때 항상 지워지고 있지 않은 의미) 시도했습니다. 나는 이것을 약 50 번하고 텍스트가 제거 될 때마다
  • 이렇게하면이 문제는 코드 자체에 있지만 LoL 클라이언트와 실제로 통합되지는 않는다고 생각하게됩니다. 그래서 StringBuilder에 문제가 있습니까? 나는 그것을 너무 자주 사용하지 않았기 때문에 너무 익숙하지 않았습니다. 모든 stringbuilder 항목을 주석 처리하고 문자열 연결로 변경했습니다. 같은 문제가 발생했습니다.
  • 부울 runCheckboxFunction을 추가하여 함수가 한 번만 실행되지만 여전히 문제가 있는지 확인하려고했습니다.

여기가 바로 지금입니다. 나는 그것이 체크 박스를 클릭했을 때 한 번이 아니라 두 번 호출되는 것처럼 어떤 이유로 든 또는 반복적으로 체크 코드 함수를 반복하는 코드에 문제가 있다는 것을 확신한다.

내 코드 :이 확인란 컨트롤 (CheckedChanged 또는 CheckStateChanged)에 사용되는 이벤트

private void checkboxFunction() 
    { 
     if (runningCheckboxFunction == true) return; 

     runningCheckboxFunction = true; 

     //CLICK IN THE SEARCH BAR (Automatically clears the text that WAS there) 
     Process[] LolClient = Process.GetProcessesByName("LolClient"); //should only return one client (i.e. get [0]) 
     if (LolClient.Length < 1) return; 
     ClickOnPoint(LolClient[0].MainWindowHandle, searchBarCheckPoint); 

     //MAKE THE STRING TO TYPE IN THE SEARCH BAR 
     StringBuilder whatToTypeInSearchBar = new StringBuilder(); 
     foreach (CheckBox cb in checkboxes) 
     { 
      if (cb.Visible == true && cb.Checked == true) 
      { 
       List<String> thisCheckboxsChamps = settingsForm.getChampionListForGroup(checkboxes.IndexOf(cb)); 
       if (thisCheckboxsChamps == null) continue; 
       foreach (String champ in thisCheckboxsChamps) 
       { 
        whatToTypeInSearchBar.Append("|"); 
        whatToTypeInSearchBar.Append(champ); 
        whatToTypeInSearchBar.Append("$"); 
       } 
      } 
     } 

     //had an issue that sometimes clicking in search bar did not automatically clear it, so select all text and backspace just in case 
     //^ = ctrl -- ^A = ctrl-A (select all) 
     SendKeys.Send("^A"); 
     //backspace 
     SendKeys.Send("{BACKSPACE}"); 

     //TYPE IN THE SEARCH BAR 
     if (whatToTypeInSearchBar.Length > 0) 
     { 
      //remove the first "|" 
      whatToTypeInSearchBar.Remove(0, 1); 
      SendKeys.Send(whatToTypeInSearchBar.ToString()); 
     } 

     runningCheckboxFunction = false; 
    } 
+0

SendWait를 사용해 보셨습니까? 나는 그것을 더 __little__ 믿을만한에 rememeber – TaW

+0

죄송합니다. 예, 실제로 sendwait 시도했는데, 실제로 이런 일이 일어날 것으로 예상하고 솔루션을 보내기까지 기다렸습니다. 원래 한 번에 하나의 큰 문자열을 작성하고이를 입력하기보다는 한 번에 하나씩 이름을 입력했습니다. 어느 쪽이든 선택의 여지가 없었습니다 – user3808547

+0

음, 코드를 실제로 두 번 __entering__에 두 번 반복 하시겠습니까? (출력에서 판단하는 것뿐만 아니라 실제로)이 문제는 stringbuilder 또는 sendkeys와는 아무런 관련이 없습니다. 거기에 어떤 스레딩/비동기 등 관련되어 있습니까? – TaW

답변

0

? 또한 CheckBox.ThreeState 속성의 값은 무엇입니까? 사용하는 이벤트가 두 번 이상 발생할 가능성이 있습니다. 이 경우 위에 나열된 기능을 호출하기 전에 특정 상태를 확인할 수 있습니다. 또한

, 당신은 SendKeys 매크로를 사용할 때, 자신의 응용 프로그램에 키를 보내는 시도하고 당신이 생성 문자열이 riight 순서 있는지 확인하기 위해 ActiveControl.KeyUp/ActiveControl.KeyDown/ActiveControl.KeyPress 이벤트를 모니터링 할 수 있습니다.

+0

CheckedChanged (디자이너 체크 상자를 두 번 클릭하면 자동으로 생성되는 CheckedChanged)를 사용하고 있습니다. ThreeState가 false로 설정되었습니다. ActiveControl에 대해 자세히 설명해 주시겠습니까? 나는 당신이 무엇을 의미하는지/어떻게 확인하고 올바른 시퀀스를 생성하는지 확인하는 방법을 확신하지 못합니다. – user3808547

+0

'ActiveControl'에 의해 키를 자신의 앱에 먼저 보내고 (예를 들어) 텍스트 상자를 사용하여 'TextBox.KeyDown' /'TextBox.KeyUp' /'TextBox.KeyPress' 이벤트를 사용하는 키 스트로크. 그렇게하면 대상 응용 프로그램에 어떤 시퀀스를 보내고 있는지 정확히 알 수 있습니다. –

+0

테스트를 마쳤으며 실제로 올바른 문자열을 만듭니다. – user3808547

관련 문제