Hướng dẫn viết auto chạy ngầm trên Windows không chiếm chuột
Cách lập trình gửi click và bàn phím ngầm bằng Win32 API. Tìm hiểu PostMessage/SendMessage để đa nhiệm máy tính.
- #automation
- #win32
- #development
Giới thiệu về Auto ngầm (Background Automation)
Thông thường, các macro recorder truyền thống di chuyển con trỏ chuột vật lý và mô phỏng nhấn phím trên màn hình chính. Điều này có nghĩa là bạn không thể sử dụng máy tính của mình trong khi tự động hóa đang hoạt động.
Để giải quyết vấn đề này, chúng ta cần can thiệp sâu vào Win32 API của hệ điều hành Windows để gửi thông điệp trực tiếp vào hàng đợi thông điệp (message queue) của ứng dụng.
1. Win32 PostMessage và SendMessage là gì?
Trong Windows, mỗi cửa sổ được định danh bằng một số gọi là HWND (Window Handle). Khi bạn click chuột hoặc gõ phím, hệ điều hành sẽ dịch các hành động này thành các thông điệp như WM_LBUTTONDOWN (click chuột trái xuống), WM_LBUTTONUP (thả chuột trái), WM_CHAR (gõ ký tự) và đẩy vào hàng đợi của cửa sổ đó.
Thay vì thực hiện các thao tác vật lý, chúng ta có thể giả lập thông điệp bằng cách gọi:
import ctypes
user32 = ctypes.windll.user32
# Gửi click chuột trái ngầm vào tọa độ (x, y)
lParam = (y << 16) | x
user32.PostMessageW(hwnd, 0x0201, 1, lParam) # WM_LBUTTONDOWN
user32.PostMessageW(hwnd, 0x0202, 0, lParam) # WM_LBUTTONUP
2. Ưu và nhược điểm của PostMessage
- Ưu điểm:
- Chạy ngầm 100%, bạn có thể kéo cửa sổ ra ngoài lề, đè cửa sổ khác lên hoặc lướt web bình thường.
- Tiết kiệm tài nguyên máy tính.
- Nhược điểm:
- Một số game/ứng dụng có cơ chế bảo mật (Anti-cheat) chặn thông điệp ảo. Đối với các app này, hệ thống cần tự động fallback sang
SendInputchiếm chuột chớp nhoáng (10-50ms) rồi trả chuột về vị trí cũ.
- Một số game/ứng dụng có cơ chế bảo mật (Anti-cheat) chặn thông điệp ảo. Đối với các app này, hệ thống cần tự động fallback sang
3. Cách MacroAuto giải quyết dễ dàng
Nếu bạn không muốn viết code Python phức tạp, MacroAuto đã đóng gói tất cả các API Win32 này thành các khối (Node) trực quan. Bạn chỉ cần kéo thả khối 'Click Ảnh Ẩn' hoặc 'Gõ Phím Ẩn', chọn cửa sổ ứng dụng và chương trình sẽ tự động xử lý các tác vụ phức tạp phía dưới.
Chúc các bạn xây dựng được các kịch bản tự động hóa hiệu quả!
