2013-07-25 2 views
0

Я пытался создать программу, которая будет использовать несколько всплывающих подсказок, но я столкнулся с проблемой: я могу использовать только по одному, потому что после этого новый будет замените предыдущий.Использовать AutoIt для вызова другого скомпилированного исполняемого файла AutoIt с параметрами

Я придумал решение: Скомпилируйте программу, которая создает всплывающую подсказку и использует ее как можно больше. Но есть еще одна проблема: я хочу всплывающие подсказки в разных позициях и с разными текстами/заголовками.

Для этого мне нужно использовать параметры или другие типы переменных, которые изменят координаты и текст всплывающей подсказки.

Мой называется ех бы выполнить что-то очень простое, как:

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

Там, вероятно, более быстрый/простой способ сделать это.

+0

Почему бы не создать маленькие графические интерфейсы? Затем вы можете разместить их там, где вы хотите. – Xenobiologist

ответ

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 *.

Смежные вопросы