2013-07-25 74 views
0

我正在嘗試創建一個使用多個工具提示的程序,但是我遇到了一個問題:我一次只能使用一個,因爲在那之後,新的取代以前。使用AutoIt調用另一個AutoIt編譯的可執行文件的參數

我想出了一個解決方案:編譯一個程序,創建一個工具提示並根據需要使用它。但接下來還有另一個問題:我想要不同位置和不同文本/標題的工具提示。

爲此,我需要使用參數或其他類型的變量來改變工具提示的座標和文本。

我叫exe文件將執行很簡單的東西,如:

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

有可能是一個更快/更簡單的方法來做到這一點。

+0

爲什麼不創建小GUI?然後你可以把它們放在你想要的地方。 – 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 *函數可能會有更好的方法。