2

我正在使用 AutoIt 尝试制作一个与Windows Journal一起使用的小热键应用程序,这样我就可以快速选择不同的颜色。

看来我已经很接近了,但距离获得预期的结果还很远。我使用 AutoIt 工具来查找工具栏的 CommandID 和颜色的 ID。这是我的代码:

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

我的问题是不会选择颜色。它将被选择到颜色周围有“选择”括号的程度,但我绘制的颜色仍然是我选择的最后一种颜色。

所以我试着弄乱了,发现这段代码:

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

它确实会选择颜色,但只会选择浅蓝色。我不知道为什么,但那是一直被选择的颜色。我还没有找到将“SendCommandID”的选择能力与“ Check ”的检查能力结合起来的方法

此外,它是一个 ToolbarWin32 控件。

4

1 回答 1

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
于 2013-06-05T05:03:11.157 回答