⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mythreads.pas

📁 热血江湖游戏辅助工具原代码 学习delphi开发游戏外挂的好例子
💻 PAS
字号:
unit MyThreads;

interface

uses SysUtils,windows,Messages,Classes,StrUtils,ShareDat;

Function HexToInt(sHex:string):integer;
procedure CtrlDefLife;
procedure CtrlAutoSay;
procedure CtrlMouse;

implementation

Function HexToInt(sHex:string):integer;
var
i:integer;
dwRes:word;
bInt:byte;
begin
SHex:=StringOfchar('0',4-length(sHex))+sHex;(*不足4位十六进制,高位补零*)
dwRes:=0;
for i:=1 to 4 do
begin
case AnsiIndexStr(LowerCase(sHex[i]),['a','b','c','d','e','f']) of
0:bInt:=10;
1:bInt:=11;
2:bInt:=12;
3:bInt:=13;
4:bInt:=14;
5:bInt:=15;
else
bInt:=strToint(sHex[i])
end;//end case
asm
xor ax,ax
mov al,byte ptr[bInt]
SHL word ptr[dwRes],4
OR word ptr[dwRes],ax
end
end;//end for
result:=dwRes
end;

function ReadData(Address: DWORD; N: integer; var Buf): integer;
var ByteOfRead: DWORD;
begin
Result:=-1;
if ReadProcessMemory(PHandle, Pointer(Address), @Buf, N, ByteOfRead) then
Result:=ByteOfRead;
end;

function DefHpThread(P:Pointer):LongInt;stdcall;
var
HpBuf:Array [0..1] of byte;
HpStr:String;
CharHP:Integer;
begin
while WaitForSingleObject(HpThread, 500)=WAIT_TIMEOUT do
begin

ReadData(HpAddress, 2, HpBuf);
HpStr:=IntToHex(HpBuf[1],2)+IntToHex(HpBuf[0],2);
CharHp:=HexToInt(HpStr);

if (ChkHp) and (CharHP<=DefHp) then
begin
asm
push KeyHp
Call KeyFunAddr
end;
end;

end;
Result:=0;
end;

function DefMpThread(P:Pointer):LongInt;stdcall;
var
MpBuf:Array [0..1] of byte;
MpStr:String;
CharMP:Integer;
begin
while WaitForSingleObject(MpThread, 500)=WAIT_TIMEOUT do
begin

ReadData(MpAddress, 2, MpBuf);
MpStr:=IntToHex(MpBuf[1],2)+IntToHex(MpBuf[0],2);
CharMP:=HexToInt(MpStr);

if (ChkMp) and (CharMP<=DefMp) then
begin
asm
push KeyMp
Call KeyFunAddr
end;
end;

end;
Result:=0;
end;

function DefBackThread(P:Pointer):LongInt;stdcall;
var
MedBuf:Array [0..1] of byte;
MedStr:String;
MedNum:Integer;
begin
while WaitForSingleObject(MedThread, 500)=WAIT_TIMEOUT do
begin
ReadData(GameKeyFirstAddr+KeyMP*8+2,2,MedBuf);
MedStr:=IntToHex(MedBuf[1],2)+IntToHex(MedBuf[0],2);
MedNum:=HexToInt(MedStr);
UseBlue:=MedNUm;

ReadData(GameKeyFirstAddr+KeyHP*8+2,2,MedBuf);
MedStr:=IntToHex(MedBuf[1],2)+IntToHex(MedBuf[0],2);
MedNum:=HexToInt(MedStr);
Usered:=MedNUm;

if (ChkMedBack) and (MedNum=0) then
begin
asm
push KeyBack
Call KeyFunAddr
end;
end;

end;
Result:=0;
end;

function AutoSkillThread(P:Pointer):LongInt;stdcall;
begin
while WaitForSingleObject(KeyThread, DefSkillTime)=WAIT_TIMEOUT do
begin

if ChkSkill then
begin
asm
push KeySkill
Call KeyFunAddr
end;
end;

end;
Result:=0;
end;

function AutoMouseThread(P:Pointer):LongInt;stdcall;
begin
while WaitForSingleObject(MouseThread, DefMouseTime)=WAIT_TIMEOUT do
begin
if MouseType=0 then begin
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
sleep(50);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end else if MouseType=1 then begin
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Sleep(50);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end;
end;
Result:=0;
end;

function AutoSayThread(P:Pointer):LongInt;stdcall;
var i:Integer;
begin
while True do begin

if Length(SayText1) > 0 then begin
for i:= 0 to Length(SayText1) do
begin
PostMessage(DllData^.GameHwnd, WM_CHAR, Ord(SayText1[i]), 0);
end;
PostMessage(DllData^.GameHwnd, WM_KEYDOWN, VK_RETURN, 0);
PostMessage(DllData^.GameHwnd, WM_KEYUP, VK_RETURN, 0);
end;
Sleep(DefSayTime);

if Length(SayText2) > 0 then begin
for i:= 0 to Length(SayText2) do
begin
PostMessage(DllData^.GameHwnd, WM_CHAR, Ord(SayText2[i]), 0);
end;
PostMessage(DllData^.GameHwnd, WM_KEYDOWN, VK_RETURN, 0);
PostMessage(DllData^.GameHwnd, WM_KEYUP, VK_RETURN, 0);
end;
Sleep(DefSayTime);

if Length(SayText3) > 0 then begin
for i:= 0 to Length(SayText3) do
begin
PostMessage(DllData^.GameHwnd, WM_CHAR,Ord(SayText3[i]), 0);
end;
PostMessage(DllData^.GameHwnd, WM_KEYDOWN, VK_RETURN, 0);
PostMessage(DllData^.GameHwnd, WM_KEYUP, VK_RETURN, 0);
end;
Sleep(DefSayTime);

if Length(SayText4) > 0 then begin
for i:= 0 to Length(SayText4) do
begin
PostMessage(DllData^.GameHwnd, WM_CHAR,Ord(SayText4[i]), 0);
end;
PostMessage(DllData^.GameHwnd, WM_KEYDOWN, VK_RETURN, 0);
PostMessage(DllData^.GameHwnd, WM_KEYUP, VK_RETURN, 0);
end;
Sleep(DefSayTime);

end;
Result:=0;
end;

function AutoSayOneThread(P:Pointer):LongInt;stdcall;
var i:Integer;
TempSay:String;
begin
while WaitForSingleObject(SayThread, DefSayTime)=WAIT_TIMEOUT do
begin
case SayNum of
1:TempSay:=SayText1;
2:TempSay:=SayText2;
3:TempSay:=SayText3;
4:TempSay:=SayText4;
end;
if Length(TempSay) > 0 then begin
for i:= 0 to Length(TempSay) do
begin
PostMessage(DllData^.GameHwnd, WM_CHAR, Ord(TempSay[i]), 0);
end;
PostMessage(DllData^.GameHwnd, WM_KEYDOWN, VK_RETURN, 0);
PostMessage(DllData^.GameHwnd, WM_KEYUP, VK_RETURN, 0);
end;
end;
Result:=0;
end;

procedure CtrlDefLife;
var TId,Tid2,Tid3,Tid4:DWORD;
begin
KeyFunAddr:=Pointer($0050C0B0);

if HpThread=0 then
begin
HpThread:=CreateThread(nil,0,@DefHpThread,nil,0,TId);
end else begin
TerminateThread(HpThread,0);
HpThread:=0;
end;

if MpThread=0 then
begin
MpThread:=CreateThread(nil,0,@DefMpThread,nil,0,Tid2);
end else begin
TerminateThread(MpThread,0);
MpThread:=0;
end;

if MedThread=0 then
begin
MedThread:=CreateThread(nil,0,@DefBackThread,nil,0,Tid3);
end else begin
TerminateThread(MedThread,0);
MedThread:=0;
end;

if KeyThread=0 then
begin
KeyThread:=CreateThread(nil,0,@AutoSkillThread,nil,0,Tid4);
end else begin
TerminateThread(KeyThread,0);
KeyThread:=0;
end;

end;

procedure CtrlAutoSay;
var TId:DWORD;
begin
if SayThread=0 then
if SayType=0 then
SayThread:=CreateThread(nil,0,@AutoSayOneThread,nil,0,TId)
else
SayThread:=CreateThread(nil,0,@AutoSayThread,nil,0,TId)
else begin
TerminateThread(SayThread,0);
SayThread:=0;
end;
end;

procedure CtrlMouse;
var TId:DWORD;
begin
if MouseThread=0 then
MouseThread:=CreateThread(nil,0,@AutoMouseThread,nil,0,TId)
else begin
TerminateThread(MouseThread,0);
MouseThread:=0;
end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -