菜鸟弱问~~帖子太长了缩短了一部分
下面是一个鼠标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;
}
//设置速度(略)
//设置地图位置列表(略)
//存储游戏的设置(略)