我正在使用AutoIt尝试制作一个小的热键应用程序来与Windows Journal配合使用,以便快速选择不同的颜色。
看来我离取得预期的结果非常接近,但距离很远。我使用了AutoIt工具来查找工具栏的CommandID和颜色的ID。这是我的代码:
ControlCommand("[CLASS:JournalApp]","",113,"SendCommandID", 40178)
我的问题是将不会选择颜色。将选择某种程度的颜色,使其周围带有“选择”括号,但是我使用的颜色仍然是我选择的最后一种颜色。
所以我尝试弄乱,发现下面的代码:
ControlCommand("[CLASS:JournalApp]","",113,"Check","")
它确实会选择颜色,但只会选择浅蓝色。我不知道为什么,但是那总是被选择的颜色。我还没有找到一种方法来将“SendCommandID” 的选择能力与“Check” 的检查能力结合起来
另外,它也是一个ToolbarWin32控件。
最佳答案
我自己弄清楚了。
这是我所学到的:
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的 native
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
关于windows - AutoIt ControlCommand不能按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16929423/