WinWait và SetTitleMatchMode

Hướng dẫn AutoHotKey và một số kỹ thuật code quan trọng khi làm việc với cửa số để tự động hóa thao tác tự động

  1. I. WinWait
  2. II. SetTitleMatchMode

WinWait-TitleMatchMode

I. WinWait 

1. WinWaitActive là gì — mục đích chính

WinWaitActive tạm dừng (wait) tiến trình hiện tại của script cho tới khi cửa sổ được chỉ định trở thành cửa sổ active (có focus).

Nếu cửa sổ xuất hiện/được active trước khi timeout — hàm trả về thông tin (HWND)

Nếu hết thời gian chờ thì trả về kết quả báo thất bại (timeout).

2. Phân biệt nhanh với lệnh liên quan

WinWait — chờ cửa sổ tồn tại (xuất hiện) nhưng chưa chắc đã active.

WinWaitActive — chờ cửa sổ có focus (active).

WinActivate — cố gắng kích hoạt một cửa sổ; thường không cần gọi WinActivate trước WinWaitActive vì WinActivate đã có vài lần thử tự động.

3. Cú pháp

WinWaitActive(WinTitle[, WinText := "", Seconds := 0, ExcludeTitle := "", ExcludeText := ""])

Giải thích tham số chính:

WinTitle — chuỗi nhận diện cửa sổ (có thể là một phần tên, ahk_exe:, ahk_class:, hoặc ký hiệu đặc biệt như "A" cho cửa sổ đang active).

WinText — (tùy chọn) một đoạn text xuất hiện trong cửa sổ.

Seconds — thời gian chờ (giây). Nếu để trống hoặc 0 thường là chờ vô thời hạn (hoặc hành vi tri nhỏ — xem docs).

ExcludeTitle/ExcludeText — loại trừ cửa sổ có chứa chuỗi đó.

4. Giá trị trả về & cách kiểm tra

Trả về HWND của cửa sổ nếu thành công (một số tài liệu v2 ghi rõ: trả HWND; nếu timeout trả 0). Nếu kết quả là 0, coi là timeout / không tìm thấy. Bạn có thể dùng điều kiện if !winId để kiểm tra.

Run "notepad.exe"
win := WinWaitActive("Untitled - Notepad", "", 5)  ; chờ tối đa 5 giây
if !win
    MsgBox "WinWaitActive timed out."
else
    MsgBox "Found Notepad. HWND = " win

5. Ví dụ nâng cao (kịch bản thật)

Mở Chrome và chờ cửa sổ sẵn sàng:

Run "C:\Program Files\Google\Chrome\Application\chrome.exe"
if !WinWaitActive("ahk_exe chrome.exe", "", 10)
{
    MsgBox "Chrome không active trong 10s — thoát hoặc thử lại."
    return
}
; tiếp tục thao tác khi Chrome active

Chờ một hộp thoại có thể tên thay đổi (dùng class):

; đợi cửa sổ có class WindowClassName active
win := WinWaitActive("[CLASS:WindowClassName]", "", 6)
if !win
    MsgBox "Timed out"
else
    ; xử lý tiếp

II. SetTitleMatchMode

1. SetTitleMatchMode là gì?

Đây là lệnh cấu hình giúp AutoHotkey biết cách so khớp tiêu đề cửa sổ khi bạn dùng các lệnh liên quan đến cửa sổ (ví dụ: WinWait, WinWaitActive, WinActivate, IfWinExist, …).

Nói cách khác: Khi bạn viết WinActivate "Notepad", thì AutoHotkey phải biết so sánh thế nào với tiêu đề cửa sổ thực tế (Untitled - Notepad hay Ghi chú - Notepad).

2. Các chế độ trong SetTitleMatchMode

Trong AutoHotkey v2, SetTitleMatchMode có 3 chế độ chính:

SetTitleMatchMode 1 (Default):     So khớp từ bắt đầu của tiêu đề.
Ví dụ:
 WinActivate "Untitled"   ; sẽ khớp "Untitled - Notepad"

Chú ý gặp nhiều: Khi trong code không có dòng lệnh SetTitleMatchMode  thì mặc định của chương trình là SetTitleMatchMode 1 (Default), nên có lúc nhìn thấy có lúc không.

SetTitleMatchMode 2:    So khớp bất kỳ vị trí nào trong tiêu đề.

Ví dụ:
 WinActivate "Notepad"    ; sẽ khớp "Untitled - Notepad"

SetTitleMatchMode 3:    So khớp chính xác toàn bộ tiêu đề.
Ví dụ:
  WinActivate "Untitled - Notepad"   ; chỉ khớp đúng như vậy

 


 

Tìm kiếm:

Hướng dẫn AutoHotKey và một số kỹ thuật code quan trọng khi làm việc với cửa số để tự động hóa thao tác tự động