【问题标题】:AutoIt ControlCommand is not working as expectedAutoIt ControlCommand 未按预期工作
【发布时间】:2013-05-31 12:47:45
【问题描述】:

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

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

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

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

于是我试了一下,发现是这段代码:

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

它确实会选择颜色,但它只会选择浅蓝色。我不知道为什么,但那是一直被选择的颜色。我还没有找到将 "SendCommandID" 的选择能力与 "Check"

的检查能力结合起来的方法

另外,它是一个 ToolbarWin32 控件。

【问题讨论】:

    标签: windows winapi autoit


    【解决方案1】:

    我自己想通了。

    这是我学到的:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-04
      • 2022-01-24
      • 2015-05-11
      • 2020-05-15
      • 2014-10-31
      • 2018-02-12
      • 2014-01-20
      • 2015-01-13
      相关资源
      最近更新 更多