ggwgw 发表于 2015-2-5 22:24:14

发一个剑网三的任务名称获取方法

剑网三的任务名称获取方法
本方法是找到这个游戏的所有任务名称。

DWORD missonNameAdderss;
void GetMissonNameAddress()      //找出游戏内指定大小内存的地址,这个地址是游戏存放任务名称以及ID的地方。
{
    MEMORY_BASIC_INFORMATION addressInfo;
    int a;
    DWORD startAddress = 0x20D00000;   //开始搜索的地址
    a = VirtualQuery ((LPCVOID)startAddress,&addressInfo,sizeof(addressInfo));
    if(a != 0)
    {
      while(addressInfo.RegionSize != 0x167000)//判断搜出来的内存大小是否为0x167000
      {
            StartAdderss = startAdderss + 0x10000;
            VirtualQuery ((LPCVOID)startAddress,&addressInfo,sizeof(addressInfo));       //VirtualQueryEx是一种函数功能,查询地址空间中内存地址的信息。
            if(addressInfo.RegionSize == 0x167000)
            {
                break;
            }
      }
      missonNameAdderss = (DWORD)adderssInfo.BaseAddress + 0x12c;
    }
}

vector<MISSONINFO> tmp_MissonName;

void BianliMissonName()
{
    DWORD tmp_address, tmp_nameaddress, tmp_nameaddress1;
    MISSONINFO misson;
    int i = 0, a;
    if (MissonNameAddress == 0) {
      GetMissonNameAddress ();
    }
    tmp_address = MissonNameAddress + 0x7c * 2;
    a = *(int*)tmp_address;
    while (a != 0) {
      tmp_nameaddress = tmp_address + 0x7c * i;
      tmp_nameaddress1 = *(DWORD*)(tmp_nameaddress + 4);
      misson.nID = *(int*)(tmp_nameaddress);      //任务ID
      a = misson.nID;
      misson.xiabiao = i;
      misson.szName = (char*)(tmp_nameaddress1);   //任务名称
      i++;
      if(misson.nID != 0) {
            tmp_MissonName.push_back(misson);
      }
    }
}

JolaSia 发表于 2015-2-7 17:49:49

路过

嗷嗷叫的老马 发表于 2015-2-8 03:21:49

楼下的接上

ghost_z 发表于 2015-4-25 18:12:33

就喜欢楼主这样的哈哈哈

Zhen-nii 发表于 2015-6-28 21:55:44


貌似很不错的样子

benben77537 发表于 2016-9-16 17:46:35

支持楼主,感谢楼主!
页: [1]
查看完整版本: 发一个剑网三的任务名称获取方法