Я сам разобрался.
Вот что я узнал:
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
person
Klik
schedule
05.06.2013