2013-01-28 28 views
5

AutoItを使用してアプリケーションを自動化しようとしていますが、自動化を開始する前にコントロールがアプリケーション内に現れるのを待つ必要があります。このコントロールは、アプリケーションの開始直後に読み込まれますが、ウィンドウのタイトルは変更されません。コントロールが表示されるまでにはどのように待つのですか?AutoITコントロールエレメントが表示されるのを待つ

答えて

7

別のGUIのコントロールへのハンドルを取得するには、そのコントロールを識別するためにAutoIt Window Info Toolを使用する必要があります。コントロールのクラス名を取得するには、タブ "Control"に行き、 "ClassnameNN"の値を調べます。今度は、以下の例のようにこの値を使用できます。

もちろん、"Button1"をAutoIt Info Toolから入手した情報に置き換え、それに応じてウィンドウタイトルを変更する必要があります。

Global $hCtrl = 0, $Waiting = True 

; your GUI loop 
While (1) 
    If $Waiting And WinExists("Title of OtherApp.exe") Then 
     $hCtrl = ControlGetHandle("Title of OtherApp.exe", "", "Button1") 
     If $hCtrl Then 
      ; we got the handle, so the button is there 
      ; now do whatever you need to do 
      GUICtrlCreateLabel("Button is there!", 10, 10) 
      $Waiting = False 
     EndIf 
    EndIf 

    $iMsg = GUIGetMsg() 
    Switch $iMsg 
     Case $GUI_EVENT_CLOSE 
      ExitLoop 
    EndSwitch 
WEnd 
+0

while($ Waiting)、While(1)。それはwhileループから壊れることはありません。それはその変更でトリックを行いますが、答えに感謝! –

+0

@JohnMosesこれは単なるスニペットであり、完全な解決策ではないので、 'While(1)'は正しくありません。独自のUIを持つAutoItスクリプトは、UIメッセージをキャッチするための無限ループで構成されています。これがスクリプトに表示したかったものです。以下を参照してください:https://www.autoitscript.com/autoit3/docs/guiref/GUIRef_MessageLoopMode.htm – mrt

+1

@JohnMosesもっと明確になるように私の例を拡張しました。 (うまくいけば:)) – mrt

-1

私はMrtの答えに追加したいと思います。 $hCtrlは明らかに目に見える

ではありませんとき、黒の楕円内のタイトルは、すなわち

しかし、ここで打ち上げの第一段階は、すでに表示されているとき例えば、私は、瞬間を取得しようとしています

しかし$hCtrl = ControlGetHandle("Title of OtherApp.exe", "", "Static13")リターンは、アドホックすでにTRUE(<HWnd>0x000...192などのようなもの)

私のソリューションを追加することである(コントロール) ControlGetHandleへのタイトル:

ControlGetHandle("Title of OtherApp.exe", "Отключено", "Static13") 
+0

落とし子がなぜ、なぜ学習者の利益のために説明するのでしょうか? – Mawg

+1

これは動作しませんが、ターゲットインターフェイスは先に移動しました。 – Hippopotamus

関連する問題