我自己想通了。
这是我学到的:
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