RSS

Hướng dẫn lập trình auto game bằng Delphi 7 (phần 2 mouse và key)

16 Th11

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é ;)
 

3 responses to “Hướng dẫn lập trình auto game bằng Delphi 7 (phần 2 mouse và key)

  1. Thanh

    03/04/2013 at 8:11 chiều

    Anh jup em tao auto danh boss rong gunny dj. Thank va hau ta

     
  2. Thanh

    03/04/2013 at 8:14 chiều

    A cho e sdt nha. Co j thi pm vo mail cua e nha

     
  3. Son

    04/06/2014 at 10:07 sáng

    Cám ơn anh rất nhiều ^^