2013-01-28 25 views
5

Tôi đang cố gắng tự động hóa một ứng dụng bằng cách sử dụng AutoIt và tôi cần đợi một điều khiển xuất hiện trong ứng dụng trước khi tự động hóa có thể bắt đầu. Điều khiển này tải ngay sau khi ứng dụng bắt đầu, nhưng nó không thay đổi tiêu đề cửa sổ. Làm cách nào để chờ kiểm soát xuất hiện?AutoIT Đợi một Yếu tố Điều khiển xuất hiện

Trả lời

7

Để xử lý điều khiển trên GUI khác, bạn cần sử dụng AutoIt Window Info Tool để xác định điều khiển đó. Để có được tên lớp của điều khiển, hãy vào tab "Điều khiển" và tra cứu giá trị cho "ClassnameNN". Bây giờ bạn có thể sử dụng giá trị này như tôi đã làm trong ví dụ bên dưới.

Tất nhiên bạn cần thay thế "Button1" bằng thông tin bạn nhận được từ Công cụ Thông tin AutoIt và sửa đổi tiêu đề cửa sổ cho phù hợp.

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

Trong khi ($ Waiting), chứ không phải trong khi (1). Nó sẽ không bao giờ thoát khỏi vòng lặp while. Nó không làm các trick với sửa đổi đó mặc dù, vì vậy cảm ơn cho câu trả lời! –

+0

@JohnMoses Không có 'Trong khi (1)' là chính xác vì đây chỉ là một đoạn trích và không phải là một giải pháp làm việc đầy đủ. Các kịch bản AutoIt có giao diện người dùng riêng bao gồm một vòng lặp vô hạn để nắm bắt thông điệp giao diện người dùng và đây là những gì tôi muốn hiển thị trong tập lệnh của mình. Xem: https://www.autoitscript.com/autoit3/docs/guiref/GUIRef_MessageLoopMode.htm – mrt

+1

@JohnMoses Tôi đã mở rộng ví dụ của mình để nó rõ ràng hơn. (hy vọng :)) – mrt

-1

Tôi muốn thêm vào câu trả lời của Mrt. Ví dụ, tôi đang cố gắng để có được những khoảnh khắc khi tiêu đề trong hình bầu dục màu đen là đã nhìn thấy được, tức là

Nhưng đây là giai đoạn đầu tiên ra mắt, khi $hCtrl rõ ràng là không nhìn thấy được

nhưng $hCtrl = ControlGetHandle("Title of OtherApp.exe", "", "Static13") lợi nhuận ad-hoc TRUE đã (cái gì đó như <HWnd>0x000...192 vv)

giải pháp của tôi là thêm (đối chứng) title to ControlGetHandle:

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

Pelase downvoters có thể giải thích tại sao, vì lợi ích của người học? – Mawg

+1

Nó không hoạt động ngay bây giờ, nhưng giao diện đích vẫn tiếp tục. – Hippopotamus

Các vấn đề liên quan