CÁC HÀM ĐIỀU KHIỂN MOUSE VÀ PHÍM
Việc đầu tiên cần làm để gửi phím và chuột đến cửa sổ game bất kỳ để điều khiển là bạn phải tìm Handler của cái cửa sổ củ chuối đó đã ví dụ:
WindowNameS := FindWindow(nil,’Windows Name’);
// Một số game chặn auto bằng việc can thiệp vào tiến trình này, nên nếu gặp trường hợp chỉ send được lệch đầu tiên rồi các lần kế tiếp không send được nữa, thì có lẽ bạn đang bị chống hack nó xxx. Cách xử lý là chạy lại đoạn mã trên để cập nhật lại giá trị của WindowsNameS mỗi lần sử dụng lện send
Giờ chỉ việc dùng hàm API Sendmessage hoặc Posmessage để gửi lệnh điều khiển tới cửa sổ game. Tôi sẽ đưa luôn các code mẫu để các bạn tham khảo:
Di chuyển chuột tới tọa độ cần thiết (in game) nếu không có nhu cầu làm việc khác thì bạn có thể xài API
SetCursorPos(X,Y); để thay thế cho sendmessage các này có nhược điểm là vì hàm API SetcusorPos chiếm quyền điều khiển con trỏ chuột hệ thống. Nên nếu bạn sử dụng hàm này thì khi auto không làm được việc gì khác.
Procedure MouseMoveTomS(X,Y:integer);
begin
SendMessage(WindownameS, WM_MOUSEMOVE, 0, MakeLParam(X,Y));
// Hoac xai ham duoi de thay the (khuyen cao ko nen dung neu ham tren dap ung duoc yeu cau)
//SetCursorPos(X,Y);
end;
Kick chuột trái tại tọa độ cần thiết
Procedure MouseClickL(X,Y:integer);
begin
MouseMoveTomS(X,Y);
SendMessage(WindownameS, WM_LBUTTONDOWN, 0,0); // Đè chuột trái
Sleep(50);
SendMessage(WindownameS, WM_LBUTTONUP, 0,0); // Nhả ra :)
end;
Kick chuột phải
Procedure MouseClickR(X,Y:integer);
begin
MouseMoveTomS(X,Y);
SendMessage(WindownameS, WM_RBUTTONDOWN, 0,0);
Sleep(50);
SendMessage(WindownameS, WM_RBUTTONUP, 0,0);
end;
Gửi phím bấm theo yêu cầu (chú ý: gia trị key ở đây là mã VK key bạn có thể tra bang VK key hoặc dùng hàm VkKeyScan() để lấy giá trị key
Procedure SendKeyTomS(Key:integer); begin SendMessage(WindownameS, WM_KEYDOWN,Key,$1C0001); // Đè phím xuống Sleep(50); SendMessage(WindownameS, WM_KEYUP, Key,$1C0001); // Nhả phím end; // Hoặc nếu bạn muốn send key ma không chờ Game xủ lý xong key Procedure SendKeyTomS(Key:integer); begin PostMessage(WindownameS, WM_KEYDOWN,Key,$1C0001); Sleep(50); PostMessage(WindownameS, WM_KEYUP, Key,$1C0001); end;
Trên đây là các hàm cơ bản phục vụ việc điều khiển game. Các bạn có thể khai triển để thực hiện theo ý muốn. Vì dụ để đè một phím liên tục thì chỉ send down key mà không nhả lên …. tương tự như vậy với mouse khi điểu khiển nhân vật chạy thì chỉ đè phím chuột trái bao giờ muồn dừng mới send lệnh nhả chuột ra.
Chúc các bạn thành công, hẹn gặp lại ở bài viết kế tiếp
Tặng các bạn thêm hàm Send CHAT hoàn thiện cho game PTV
procedure SendChat(msg: String); var i: Integer; begin PostMessage(WindownameS, WM_KEYDOWN, VK_RETURN, $1C0001); PostMessage(WindownameS, WM_KEYDOWN, VK_DOWN, $500001); for i := 1 to length(msg) do PostMessage(WindownameS, WM_CHAR, Ord(msg[i]), 0); PostMessage(WindownameS, WM_KEYDOWN, VK_RETURN, $1C0001); PostMessage(WindownameS, WM_KEYUP, VK_RETURN, $1C0001); PostMessage(WindownameS, WM_KEYDOWN, VK_RETURN, $1C0001); PostMessage(WindownameS, WM_KEYUP, VK_RETURN, $1C0001); PostMessage(WindownameS, WM_KEYDOWN, VK_RETURN, $1C0001); PostMessage(WindownameS, WM_KEYUP, VK_RETURN, $1C0001); end;
Hãy thử tìm hiểu xem tại sao lại nhiều lệnh PostMessage thế nhé ;)
Thanh
03/04/2013 at 8:11 chiều
Anh jup em tao auto danh boss rong gunny dj. Thank va hau ta
Thanh
03/04/2013 at 8:14 chiều
A cho e sdt nha. Co j thi pm vo mail cua e nha
Son
04/06/2014 at 10:07 sáng
Cám ơn anh rất nhiều ^^