2013-06-05 2 views
2

AutoIt을 사용하여 Windows Journal과 작동하도록 약간의 단축키 응용 프로그램을 만들었으므로 다른 색상을 빠르게 선택할 수 있습니다.AutoIt ControlCommand가 예상대로 작동하지 않습니다.

나는 아주 가깝고 아직 원하는 결과를 얻지 못하고있는 것 같습니다. AutoIt 도구를 사용하여 도구 모음의 CommandID와 색상 ID를 찾습니다. 여기 내 코드는 다음과 같습니다

ControlCommand("[CLASS:JournalApp]","",113,"SendCommandID", 40178) 

내 문제는 색상이 선택되지 않을 것입니다. 색깔이 주위에 "선택"괄호를 가질 정도로 선택 될 것이지만 내가 그린 그림은 내가 선택한 마지막 색상이 될 것입니다.

그래서 나는 장난 시도하고이 코드를 발견 :

ControlCommand("[CLASS:JournalApp]","",113,"Check","") 

그것은 참으로 색상을 선택하지만, 그것은 단지 라이트 블루 색상을 선택합니다. 왜 그런지는 모르겠지만, 항상 선택되는 색상입니다. 내가 의 검사 능력을 "SendCommandID"의 선택 능력을 결합 할 수있는 방법을 발견하지 않았습니다

는 또한,이 ToolbarWin32 컨트롤이다 "확인".

답변

3

나는 그것을 스스로 알아 냈습니다.

는 여기에 내가 배운 내용은 다음과 같습니다

ControlCommand("[CLASS:JournalApp]","",113,"Check","") 

는 확인되는 버튼을 지정하는 방법은 없습니다 점에서 심각한 약점을 가지고 있습니다. 처음에는 무작위로 보였지만 잠시 후에 놀아 나는 클라이언트 윈도우에 상대적인 특정 좌표에서 그것을 한 것으로 나타났습니다. 왜? 나는 모른다. 그러나 적어도 그것은 무작위가 아닙니다.

ControlCommand("[CLASS:JournalApp]","",113,"SendCommandID", 40178) 

약점이 있지만 표면에있는 동안 버튼을 성공적으로 클릭 한 것으로 보입니다. 버튼의 기능은 실제로 실행되지 않습니다. 필자의 특정한 상황에서이 버튼을 클릭 한 것처럼 보였지만 펜을 사용한 후에는 펜의 색상이 변경되지 않았습니다. 나는 주위를 둘러 보았다 및 AutoIt이이 ToolBarWin32 클래스 처리를 위해 특별히 라이브러리를 가지고 있음을 발견

:

여기 내 솔루션 (들)입니다. 이것은 GuiToolbar.au3의 도서관입니다. 이것으로 나는 몇 가지 일을 할 수 있다는 것을 알았습니다. 하나는 버튼에 클릭을 보내고 버튼 상태를 변경할 수도 있다는 것입니다. 단추를 클릭 한 상태에서 이벤트를 트리거하는 것과 아무런 관련이없는 것으로 나타났습니다. 그러나 마우스가 움츠러 들었던 약점이있었습니다. 내 마우스가 우선적으로 움직이기 때문에 내 펜이 태블릿 근처에 있었기 때문에이 기능이 작동하지 않았습니다. 그래서 단축키를 사용하기 위해 필자의 타블렛에서 펜을 들어야했습니다. 그리 편리하지는 않습니다. 난 후 무엇을 발견

if WinActive("[CLASS:JournalApp]") Then 
    WinActivate("[CLASS:ToolbarWindow32; INSTANCE:2]", "") 
    $cmdId = "401"&$hotKeys[$key-1+$shift] 
    If $cmdId < 40172 or $cmdId > 40188 Then 
     Return 
    EndIf 
    $hWnd = ControlGetHandle("[CLASS:JournalApp]", "", 113) 
    _GUICtrlToolbar_ClickButton($hWnd, $cmdId) 
EndIf 

가 AutoIt을의 기본 ControlClick()는 마우스가 전혀 주저하게하지 않은 점에서 훨씬 더 유용했다되었습니다 여기에 해당 솔루션에 대한 내 코드이었다. 그것은 mouseclick 이벤트를 직접 트리거했습니다. 그래서 훨씬 더 깨끗한 솔루션을 위해 만든 툴바 라이브러리의 멋진 명령과 함께.여기에 있습니다 :

if WinActive("[CLASS:JournalApp]") Then 
    WinActivate("[CLASS:ToolbarWindow32; INSTANCE:2]", "") 
    $cmdId = "401"&$hotKeys[$key-1+$shift] 
    If $cmdId < 40172 or $cmdId > 40188 Then 
     Return 
    EndIf 
    ConsoleWrite($hotKeys[$key-1]) 
    $hWnd = ControlGetHandle("[CLASS:JournalApp]", "", 113) 

    ;get the coords of the button and control send a click 
    local $btnCoords= _GUICtrlToolbar_GetButtonRect($hWnd, $cmdId) 

    ControlClick("[CLASS:JournalApp]", "", "[CLASS:ToolbarWindow32; INSTANCE:2]","left",1,$btnCoords[0]+2,$btnCoords[1]+2) 
EndIf 
관련 문제