Bí quyết treo nhiều tab game/app MMO không cần máy ảo nặng nề
Tận dụng Windows Station và CreateDesktopW để chạy ứng dụng trong màn hình ảo ẩn. Tiết kiệm 90% CPU và RAM.
- #automation
- #hidden-desktop
- #mmo
Vấn đề tài nguyên khi treo nhiều máy ảo
Đối với dân cày MMO, game thủ treo nhiều tài khoản (multi-accounting) hoặc các tác vụ chạy bot số lượng lớn, giải pháp quen thuộc là cài đặt VMware Workstation hoặc các trình giả lập Android (LDPlayer, Nox).
Tuy nhiên, mỗi máy ảo hoặc giả lập đều phải gánh toàn bộ một hệ điều hành đầy đủ, tiêu tốn ít nhất 2GB-4GB RAM và 1-2 nhân CPU chỉ để khởi động. Khi nâng lên 10-20 luồng, máy tính của bạn sẽ quá tải nhanh chóng.
Giải pháp: Win32 Hidden Desktop (Desktop Ẩn)
Hệ điều hành Windows có sẵn kiến trúc quản lý màn hình được chia thành các Window Station và Desktop. Màn hình chính bạn đang nhìn thấy chính là desktop có tên Default thuộc window station WinSta0.
Bằng cách gọi API CreateDesktopW, chúng ta có thể tạo ra một desktop hoàn toàn mới, độc lập và chạy hoàn toàn ẩn dưới nền:
import ctypes
# Tạo desktop ẩn mới tên 'MyHiddenDesktop'
h_desktop = ctypes.windll.user32.CreateDesktopW(
"MyHiddenDesktop", None, None, 0, 0x01ff, None
)
Sau đó, ta có thể khởi chạy ứng dụng trực tiếp vào desktop này bằng cách gán trường lpDesktop trong cấu trúc STARTUPINFOW thành "WinSta0\\MyHiddenDesktop" khi gọi CreateProcessW.
Tại sao cách này tối ưu hơn máy ảo?
- Không gánh hệ điều hành ảo: Ứng dụng chạy trực tiếp trên hệ điều hành Windows gốc của bạn, dùng chung nhân hệ điều hành. Chỉ tốn RAM/CPU của bản thân ứng dụng đó.
