菜鸟弱问~~帖子太长了缩短了一部分

yuyangmain 2006-05-08 05:30:32
下面是一个鼠标hook dll的cpp文件和主程序获取一个游戏窗口的一部分,请问我还需要做些什么才能让鼠标在游戏里模拟动作或者键盘模拟动作呢?另外顺便问下如果能是否能开2个游戏窗口而不影响另外一个游戏的操作呢?这个代码很老了~几年前因为硬盘机械性划伤~被遗失了一部分~请问谁能帮帮我完成这个心愿啊~我想做个小小的外挂~什么游戏的都可以啊~(网络的)~奋斗奋斗奋斗~大侠帮忙啊~
================================cpp================================
#pragma option -zRSHSEG // 改变缺省数据段名
#pragma option -zTSHCLASS // 改变缺省数据类名

#include <windows.h>
#pragma argsused

#define WM_RECORD (WM_USER+2) //自定义消息


// 以下都将是共享区内存变量
POINT MouseLoc={0,0}; // 存放鼠标位置
HHOOK NewHook=NULL; // 存放新钩子句柄
int LoadCount=0; // DLL装入次数计数
HWND hSaWnd=NULL; //游戏的窗口
HWND hStaWnd=NULL; //sta 窗口

HINSTANCE DllHinst;
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
DllHinst=hinst;
if (reason==DLL_PROCESS_ATTACH) // DLL入口
LoadCount+=1; // 装入计数
else
if (reason==DLL_PROCESS_DETACH) // DLL出口处理
LoadCount-=1;
return 1;
}

extern "C" __declspec(dllexport)
void GetMouse(int &mx,int &my,int &js) // DLL导出函数GetMouse()
{
mx=MouseLoc.x; // 送出鼠标位置
my=MouseLoc.y;
js=LoadCount; // 送出DLL装入次数
}

extern "C" __declspec(dllexport)
void SetHwnd(HWND hSa,HWND hSta) // DLL导入函数3 设置窗口句并
{
hSaWnd=hSa;
hStaWnd=hSta;
}

LRESULT CALLBACK MouseHook(int nCode,
WPARAM wParam,LPARAM lParam)
{
if ((nCode==HC_ACTION)&&(wParam==WM_RBUTTONDBLCLK)) //若是右键双击
{
MOUSEHOOKSTRUCT *l=(MOUSEHOOKSTRUCT *)lParam;
if (l->hwnd ==hSaWnd) //若是在游戏中点击
{
MouseLoc=l->pt; //送鼠标位置
SendMessage(hStaWnd,WM_RECORD,wParam,lParam);
}
}
return(CallNextHookEx(NewHook,nCode,wParam,lParam));
}

extern "C" __declspec(dllexport)
void EnableHook() // 导出函数EnableHook()
{
if (NewHook==NULL) // 安装新钩子
NewHook=SetWindowsHookEx(WH_MOUSE,
(HOOKPROC)MouseHook,
DllHinst,0);
}

extern "C" __declspec(dllexport)
void DisableHook() // 导出函数DisableHook()
{
if (NewHook!=NULL)
{
UnhookWindowsHookEx(NewHook);
NewHook=NULL; // 卸掉新钩子
}
}
=============================================主程序的前部分~=============================
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "u_S.h"
#include "u_script.h"
#include "u_ShowMsg.h"
#include "u_ChangeArms.h"
#include "u_Setting.h"
#include "u_ShowInfo.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TfrmMain *frmMain;

//---------------------------------------------------------------------------
//全局临时变量
DEBUG_EVENT de;
AnsiString BUFF;
char TT[1300];
char BUFMORNDATA[3]; //时间的数据
int TimeWDE=100; //等待调试时间(机器慢,则加大)
bool WaitPacket;
AnsiString SendTimerStr;
AnsiString DetailInfo;
DWORD TYU=0,TYU2=0;
DWORD FCST,FCET;
int fSendEcho=0;
//int SubSpeed=900;

LPVOID SAA_ADDR=0;
LPCVOID SAA_INS=0;

AnsiString PSendStr;

int tmFIGHT1=0,tmFIGHT2=0;

BOOL CanFight=true; //当前能否发送战斗封包(战斗结束后可以)
BOOL CanSendPacket=true; //是否能发送封包(要接收到封报后才行,以防网络问题)
int bSendOrgFightPacket; //是否发送了****的封包
int OrgFightState; //标志****时的状态,-1:不能发送;0:可以发送 ;接收到XYD时=1,之后若发送EO 0封包,则=0,为0时才可以发送****封包

BOOL PIsGoInOutJingJiChang=false; //是否进出***
BOOL PIsAutoSendMail=false; //是否自动回信
AnsiString PstrGoInOutJingJiChang=""; //进出***的风包

bool PLeaveGame;

TStringList *RecvList; //封包信息纪录

DWORD CALLBACK MyLoop3(void *ptr);

//得到游戏的窗口名称
HWND __fastcall GetSaWindowHandle()
{
HWND hCurrentWindow;
char *lpStr;
AnsiString saWindowName,tmp;
lpStr=new char[255];
hCurrentWindow = GetWindow(Application->Handle, GW_HWNDFIRST);
while (hCurrentWindow!=0)
{
GetWindowText(hCurrentWindow,lpStr, 255);
saWindowName=lpStr;
tmp=saWindowName.SubString(1,14);
if (UpperCase(tmp)==UpperCase("游 戏 名 称"))
{
delete lpStr;
return hCurrentWindow;
}
hCurrentWindow = GetWindow(hCurrentWindow, GW_HWNDNEXT);
}
return NULL;
}

BOOL __fastcall IsSoftIceLoaded() //监测soft ice是否运行
{
String SC="C";
HANDLE hFile;
String SE="E";
String SI="I";
String NTICE="\\\\.\\NT";
String SICE="\\\\.\\S";

// detect soft-ice for 98
SICE+=SI+SC+SE;
hFile = CreateFile(SICE.c_str(),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if( hFile != INVALID_HANDLE_VALUE ) {
CloseHandle(hFile);
return true;
}

// detect soft-ice for nt
NTICE+=SI+SC+SE;
hFile = CreateFile(NTICE.c_str(),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

if( hFile != INVALID_HANDLE_VALUE )
{
CloseHandle(hFile);
return true;
}
return false;
}

//设置速度(略)


//设置地图位置列表(略)

//存储游戏的设置(略)


...全文
230 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuyangmain 2006-05-11
  • 打赏
  • 举报
回复
我再顶~
yuyangmain 2006-05-11
  • 打赏
  • 举报
回复
顶上去
yimawww 2006-05-11
  • 打赏
  • 举报
回复
帮顶,我也想弄个。
就怕被封号。
其实我不会做。
楼主做好记得给我个 啊 。
QQ:119001531
constantine 2006-05-09
  • 打赏
  • 举报
回复
网络的还是先捕捉包,然后分析游戏的包
这样比较合适
cczlp 2006-05-09
  • 打赏
  • 举报
回复
落后的技术了。
截获网络封包或修改游戏内存要好些
yuyangmain 2006-05-09
  • 打赏
  • 举报
回复
2001年时候网络上的朋友发给我的那时候看不懂没学呢~现在找不到人了~失落~哪位大侠能指点下方向?
xiaoshi0 2006-05-08
  • 打赏
  • 举报
回复
程序太长了
stevenjscn 2006-05-08
  • 打赏
  • 举报
回复
顶!

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧