0

我试图创建一个可以使用多个工具提示的程序,但我遇到了一个问题:我一次只能使用一个,因为在那之后,新的将取代以前的。

我想出了一个解决方案:编译一个创建工具提示的程序并尽可能多地使用它。但是还有另一个问题:我希望工具提示位于不同的位置并具有不同的文本/标题。

为此,我需要使用会更改工具提示的坐标和文本的参数或其他类型的变量。

我调用的 exe 会执行一些非常简单的操作,例如:

ToolTip($text, $x, $y, $title, 0, 1 + 4)
Sleep(10000)

可能有一种更快/更简单的方法来做到这一点。

4

1 回答 1

2

最简单的方法是使用/AutoIt3ExecuteLine命令行选项,它允许您从命令行运行 1 行代码。在最简单的情况下,您可以像这样实现它:

_ShowAnotherTooltip(1000, "Hello", 100, 100)
_ShowAnotherTooltip(1000, "World", 200, 200)


Func _ShowAnotherTooltip($time, $text, $x = Default, $y = Default, $title = "", $icon = Default, $options = Default)
    Local $cmd = StringFormat("ToolTip(%s,%s,%s,%s,%s)", "'" & $text & "'", $x, $y, "'" & $title & "'", $icon, $options)

    Run("""" & @AutoItExe & """ /AutoIt3ExecuteLine ""Sleep(" & $cmd & "*0+" & $time & ")""")
EndFunc   ;==>_ShowAnotherTooltip

这里唯一真正的诡计是将工具提示和睡眠放在一条线上。生成的代码将类似于:

Sleep(ToolTip('Hello', 100, 100, '', Default, Default)*0+1000)

根据您的计算机的性能,您可能会看到两个工具提示显示之间有明显的延迟。如果你想让它们同时显示,那么代码会变得有点复杂:

If $CmdLine[0] And $CmdLine[1] = "/ExecuteLine" Then
    ; This is the child script

    ; Wait for the window to appear
    WinWait($CmdLine[2])

    ; Then execute the line.
    Execute($CmdLine[3])

    Exit
EndIf

_AddAnotherTooltip(1000, "Hello", 100, 100)
_AddAnotherTooltip(1000, "World", 200, 200)

_ShowTheTooltips()



Func _ShowTheTooltips()
    GUICreate("ShowThoseTooltipsNow")
    Sleep(1000)
EndFunc   ;==>_ShowTheTooltips

Func _AddAnotherTooltip($time, $text, $x = Default, $y = Default, $title = "", $icon = Default, $options = Default)
    Local $cmd = StringFormat("ToolTip(%s,%s,%s,%s,%s)", "'" & $text & "'", $x, $y, "'" & $title & "'", $icon, $options)

    Local $iPid
    If @Compiled Then
        $iPid = Run("""" & @AutoItExe & """ /ExecuteLine ShowThoseTooltipsNow ""Sleep(" & $cmd & "*0+" & $time & ")""")
    Else
        $iPid = Run("""" & @AutoItExe & """ """ & @ScriptFullPath & """ /ExecuteLine ShowThoseTooltipsNow ""Sleep(" & $cmd & "*0+" & $time & ")""")
    EndIf

    ProcessWait($iPid)
EndFunc   ;==>_AddAnotherTooltip

有更好的进程间通信方法,但这种方法非常简单。

最后,使用GUITooltip * 函数可能有更好的方法。

于 2013-07-25T14:50:08.133 回答