游戏外挂制作

 

游戏外挂制作

玩了那么久的游戏,今天心血来潮写点东西,探讨一下游戏外挂的制作。
简单的游戏外挂无非就是将你从重复的按键中解脱出来,模拟按键,实现自动的吃药。
这个外挂适用于对按键消息没有屏蔽的游戏,如热血江湖。
主要用
keybd_event函数实现模拟按键的功能。
keybd_event函数原型:
VOID keybd_event(
  BYTE bVk,           // 定义一个虚据拟键码
  BYTE bScan,         // 定义该键的硬件扫描码
  DWORD dwFlags,      // 定义函数操作的名个方面的一个标志位集
  DWORD dwExtraInfo   // 通常不用的一个值。api函数GetMessageExtraInfo可取得这个值。允许使用的值取决于特定的驱动程序
);
SetTimer函数实现计时的功能。
SetTimer函数原型:
UINT_PTR SetTimer(
   HWND hWnd,               // 窗口句柄
   UINT_PTR nIDEvent,       // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
   UINT uElapse,            // 时间间隔,单位为毫秒
   TIMERPROC lpTimerFunc    // 回调函数
);
回调函数:
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);

这个程序用热血江湖V20010进行测试通过.实现自动吃药
以下是部分代码:
首先制作一个系统钩子,用它截获并处理送给游戏程序的消息(如键盘,鼠标消息等)。
具体可以参考http://dev.csdn.net/article/3/3912.shtm
再用MFC做个界面程序,将钩子和游戏程序关联起来
    CHook m_hook;
    HWND hWnd;  
    hWnd=::FindWindow(NULL,"YB_OnlineClient");//获得窗口句柄
    m_hook.StartHook(hWnd);//加载钩子

BOOL CHook::StartHook(HWND hWnd)

    SetTimer(NULL,0,1000,(TIMERPROC)TimerProc);
}
void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
{
 DWORD hProcId;  
 GetWindowThreadProcessId(CY_hwnd,&hProcId);  //获取进程ID
 HANDLE ghd = OpenProcess(PROCESS_ALL_ACCESS,FALSE,hProcId); //访问进程
 if(ghd)
 {
  DWORD dHP,dMP,bytes;
  WORD  d_red = 100;  //HP底限
  WORD  buff;
   
  dHP=0x045421A0 ;  //血的内存地址(热血江湖V20010版)
  //内存地址可以通过内存分析软件得出,如FPE2001
  
  //读内存
  BOOL ok = ReadProcessMemory(ghd , (void *)dHP , (void *)&buff , 2 , &bytes);//读内存血值到缓冲
  if(ok)
  {
   if(buff_red < d_red) //判断内存HP是否小于底限
   {
          keybd_event( VK_F1 , MapVirtualKey(VK_F1,0) , 0 , 0);    //按下键
          Sleep( 100 );              //延迟
          keybd_event( VK_F1 , MapVirtualKey(VK_F1,0) , KEYEVENTF_KEYUP , 0); //松开键
   } 
  }
 }
}
呵呵,程序基本结束,自动补蓝,自动群医连续技能和这大同小异。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值