我使用AutoIt来尝试制作一个热键应用程序来使用Windows日记本,以便快速select不同的颜色。
看起来我非常接近,但还没有达到预期的结果。 我使用AutoIt工具来查找工具栏的CommandID和颜色的ID。 这是我的代码:
ControlCommand("[CLASS:JournalApp]","",113,"SendCommandID", 40178)
我的问题是,颜色不会被选中。 它会被选中的颜色将有围绕它的“select”括号,但我画的颜色仍然是我select的最后一个颜色。
所以我试着乱搞,发现这个代码:
ControlCommand("[CLASS:JournalApp]","",113,"Check","")
它确实会select颜色,但只会select淡蓝色。 我不知道为什么,但这是总是被选中的颜色。 我还没有find一种方法将“SendCommandID”的select能力与“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原生的ControlClick()
更有用,因为它不会导致鼠标无法退缩。 它直接触发了鼠标点击事件。 所以,与工具栏库中的一个很好的命令相结合,为更清洁的解决方案。 这里是:
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