📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, IniFiles, Registry,
HotKeyManager, PsGlobal;
const
LOCALIZED_KEYNAMES = True;
type
TKeyInfo = record
vkey: Byte;
x: integer;
y: integer;
end;
type
TForm1 = class(TForm)
Timer1: TTimer;
GroupBox1: TGroupBox;
CheckBox5: TLabel;
UpDown2: TUpDown;
eAutoMagic: TComboBox;
Label1: TLabel;
eAutoMagicGap: TEdit;
GroupBox2: TGroupBox;
Edit1: TEdit;
Label2: TLabel;
UpDown1: TUpDown;
Label3: TLabel;
Magic1: TComboBox;
Label4: TLabel;
Magic2: TComboBox;
Label5: TLabel;
Magic3: TComboBox;
Label6: TLabel;
ComboBox4: TComboBox;
Magic4: TComboBox;
Label7: TLabel;
Edit2: TEdit;
UpDown3: TUpDown;
Label8: TLabel;
Timer2: TTimer;
Timer3: TTimer;
Label9: TLabel;
Edit3: TEdit;
UpDown4: TUpDown;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
procedure KeybdEvent(KEY: WORD);
procedure MouseEvent(Num: Integer);
procedure SendKey(Key: Word; Num: integer);
procedure Timer1Timer(Sender: TObject);
procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);
procedure Edit1Change(Sender: TObject);
procedure SetGJ;
procedure Edit2Change(Sender: TObject);
procedure UpDown3Click(Sender: TObject; Button: TUDBtnType);
procedure Timer3Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure eAutoMagicChange(Sender: TObject);
procedure UpDown2Click(Sender: TObject; Button: TUDBtnType);
procedure eAutoMagicGapChange(Sender: TObject);
procedure Magic1Change(Sender: TObject);
procedure Magic2Change(Sender: TObject);
procedure Magic3Change(Sender: TObject);
procedure Magic4Change(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
private
{ Private declarations }
public
GJCount, GJNum: Integer;
GJActive, IsBeginGJ, GJ1, GJ2, GJ3, GJ4: Boolean;
AutoMagicKEY: Word;
AutoMagicGap: integer;
MouseKEY: Integer;
hotkeyid: integer;
FPath: string;
UseWindowMode: Boolean;
procedure BeginGJ;
procedure BeginAutoGJ;
end;
var
Form1: TForm1;
AKEYList: array of word;
Numkeys: array[1..10] of TKeyInfo;
mX, mY0, mY1, mY2, mY3, mY4, mY5, mY6, mY7, mY8, mY9: integer;
GameTitle: string;
// hwnd: dword;
implementation
{$R *.dfm}
function sethook: bool; external 'MXTools.dll';
function endhook: bool; external 'MXTools.dll';
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Trim(eAutoMagic.Text) = '' then begin
Timer1.Enabled := False;
exit;
end;
SendKey(Numkeys[eAutoMagic.ItemIndex + 1].vkey, eAutoMagic.ItemIndex + 1);
end;
procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin
SetGJ;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
SetGJ;
end;
procedure TForm1.Edit2Change(Sender: TObject);
begin
SetGJ;
end;
procedure TForm1.UpDown3Click(Sender: TObject; Button: TUDBtnType);
begin
SetGJ;
end;
procedure TForm1.SetGJ;
var j: integer;
begin
J := 0;
Timer2.Interval := UpDown1.Position;
Timer3.Interval := UpDown3.Position * 1000;
if Magic1.ItemIndex <> 0 then begin
inc(j);
SetLength(AKEYList, j);
AKEYList[j - 1] := Numkeys[Magic1.ItemIndex].vkey;
end;
if Magic2.ItemIndex <> 0 then begin
inc(j);
SetLength(AKEYList, j);
AKEYList[j - 1] := Numkeys[Magic2.ItemIndex].vkey;
end;
if Magic3.ItemIndex <> 0 then begin
inc(j);
SetLength(AKEYList, j);
AKEYList[j - 1] := Numkeys[Magic3.ItemIndex].vkey;
end;
if Magic4.ItemIndex <> 0 then begin
inc(j);
SetLength(AKEYList, j);
AKEYList[j - 1] := Numkeys[Magic4.ItemIndex].vkey;
end;
end;
procedure TForm1.BeginGJ;
begin
GJNum := 0;
GJCount := 0;
if (Magic1.ItemIndex = 0) and (Magic2.ItemIndex = 0) and (Magic3.ItemIndex = 0)
and (Magic4.ItemIndex = 0) then begin
Timer2.Enabled := False;
IsBeginGJ := False;
exit;
end;
Timer2.Enabled := (not Timer2.Enabled);
IsBeginGJ := Timer2.Enabled;
GroupBox2.Caption := '挂技能设置(热键HOME)-';
if IsBeginGJ then begin
CheckBox2.Caption := '启动';
GroupBox2.Caption := GroupBox2.Caption + '开始';
UpDown1.Enabled := False;
UpDown3.Enabled := False;
UpDown4.Enabled := False;
Magic1.Enabled := False; Magic2.Enabled := False;
Magic3.Enabled := False; Magic4.Enabled := False;
ComboBox4.Enabled := False; Edit2.Enabled := False;
Edit1.Enabled := False; edit3.Enabled := False;
end else begin
GroupBox2.Caption := GroupBox2.Caption + '停止';
CheckBox2.Caption := '停止';
UpDown1.Enabled := True;
UpDown3.Enabled := True;
UpDown4.Enabled := True;
Magic1.Enabled := True; Magic2.Enabled := True;
Magic3.Enabled := True; Magic4.Enabled := True;
ComboBox4.Enabled := True; Edit2.Enabled := True;
Edit1.Enabled := True; edit3.Enabled := True;
Timer3.Enabled := False;
end;
end;
procedure TForm1.Timer3Timer(Sender: TObject);
begin
SendKey(Numkeys[ComboBox4.ItemIndex + 1].vkey, ComboBox4.ItemIndex + 1);
Timer3.Enabled := False;
if IsBeginGJ then begin
GJCount := 0;
GJNum := 0;
Timer2.Enabled := True;
end;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
var T1: integer;
begin
if not IsBeginGJ then begin
Timer2.Enabled := False;
exit;
end;
if GJCount >= UpDown4.Position then begin
Timer2.Enabled := False;
SendKey(Numkeys[ComboBox4.ItemIndex + 1].vkey, ComboBox4.ItemIndex + 1);
Timer3.Enabled := True;
exit;
end;
T1 := StrToInt(chr($ + AKEYList[GJNum]));
T1 := T1;
if T1 = 0 then T1 := 9;
SendKey(AKEYList[GJNum], T1);
inc(GJNum);
if (GJNum >= Length(AKEYList)) then begin
GJNum := 0;
inc(GJCount);
end;
end;
procedure TForm1.KeybdEvent(KEY: WORD);
var
pt1, PT2: TPoint;
begin
keybd_event(key, MapVirtualKey(key, 0), 0, 0);
keybd_event(key, MapVirtualKey(key, 0), 2, 0);
// hwnd := FindWindow(nil, pchar(GameTitle));
// PostMessage(hwnd, WM_KEYDOWN, KEY, 0);
end;
procedure TForm1.MouseEvent(Num: Integer);
var TP: TPoint;
begin
TP := Mouse.CursorPos;
// hwnd := FindWindow(nil, pchar(GameTitle));
SetCursorPos(Numkeys[num].x, Numkeys[num].y);
// PostMessage(hwnd, MOUSEEVENTF_LEFTDOWN, 0, 0);
// PostMessage(hwnd, MOUSEEVENTF_LEFTUP, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
SetCursorPos(TP.X, TP.Y);
end;
procedure TForm1.SendKey(Key: Word; Num: integer);
begin
if CheckBox1.Checked then
MouseEvent(num)
else
KeybdEvent(key);
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var IniFile: TIniFile;
begin
IniFile := TiniFile.Create(FPath + 'Config.ini');
with IniFile do begin
writeInteger('CONFIG', 'Top', self.Top);
writeInteger('CONFIG', 'Left', self.Left);
WriteInteger('CONFIG', 'AutoMagic', eAutoMagic.ItemIndex);
WriteInteger('CONFIG', 'Magic1', Magic1.ItemIndex);
WriteInteger('CONFIG', 'Magic2', Magic2.ItemIndex);
WriteInteger('CONFIG', 'Magic3', Magic3.ItemIndex);
WriteInteger('CONFIG', 'Magic4', Magic4.ItemIndex);
WriteInteger('CONFIG', 'Magic7', ComboBox4.ItemIndex + 1);
WriteInteger('CONFIG', 'MagicGap', UpDown1.Position);
WriteInteger('CONFIG', 'AutoMagicGap', UpDown2.Position);
WriteInteger('CONFIG', 'MagicGap7', UpDown3.Position);
WriteInteger('CONFIG', 'whileGJ', UpDown4.Position);
WriteInteger('CONFIG', 'MouseX', MX);
WriteInteger('CONFIG', 'MouseY0', MY0);
WriteInteger('CONFIG', 'MouseY1', MY1);
WriteInteger('CONFIG', 'MouseY2', MY2);
WriteInteger('CONFIG', 'MouseY3', MY3);
WriteInteger('CONFIG', 'MouseY4', MY4);
WriteInteger('CONFIG', 'MouseY5', MY5);
WriteInteger('CONFIG', 'MouseY6', MY6);
WriteInteger('CONFIG', 'MouseY7', MY7);
WriteInteger('CONFIG', 'MouseY8', MY8);
WriteInteger('CONFIG', 'MouseY9', MY9);
Free;
end;
UnRegisterHotKey(handle, hotkeyid);
GlobalDeleteAtom(hotkeyid + 1);
end;
procedure TForm1.eAutoMagicChange(Sender: TObject);
begin
AutoMagicKEY := Numkeys[eAutoMagic.ItemIndex + 1].vkey;
// Resource.AutoMagicKEY := Numkeys[eAutoMagic.ItemIndex + 1].shift;
end;
procedure TForm1.UpDown2Click(Sender: TObject; Button: TUDBtnType);
begin
AutoMagicGap := UpDown2.Position;
end;
procedure TForm1.eAutoMagicGapChange(Sender: TObject);
begin
AutoMagicGap := UpDown2.Position;
end;
procedure TForm1.Magic1Change(Sender: TObject);
begin
SetGJ;
end;
procedure TForm1.Magic2Change(Sender: TObject);
begin
SetGJ;
end;
procedure TForm1.Magic3Change(Sender: TObject);
begin
SetGJ;
end;
procedure TForm1.Magic4Change(Sender: TObject);
begin
SetGJ;
end;
procedure TForm1.BeginAutoGJ;
begin
Form1.Timer1.Enabled := (not Form1.Timer1.Enabled);
GroupBox1.Caption := '连击设置(热键 ~ )-';
if Timer1.Enabled then begin
GroupBox1.Caption := GroupBox1.Caption + '正在攻击';
eAutoMagic.Enabled := False;
eAutoMagicGap.Enabled := False;
UpDown2.Enabled := False;
end else begin
eAutoMagic.Enabled := True;
eAutoMagicGap.Enabled := True;
UpDown2.Enabled := True;
GroupBox1.Caption := GroupBox1.Caption + '停止攻击';
end;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then CheckBox1.Caption := '鼠标'
else CheckBox1.Caption := '键盘';
end;
procedure TForm1.FormCreate(Sender: TObject);
var IniFile: TIniFile;
Reg: TRegistry;
begin
Reg := TRegistry.Create;
with Reg do begin
RootKey := HKEY_CURRENT_USER;
OpenKey('\Software\PPSSoft\MXTools', True);
FPath := ReadString('FilePath');
CloseKey;
Free;
end;
Caption := Caption + ' Ver:' + GetFileVersion(FPath + 'MXTools.dll');
IniFile := TiniFile.Create(FPath + 'Config.ini');
with IniFile do begin
self.Left := ReadInteger('CONFIG', 'Left', 100);
self.Top := ReadInteger('CONFIG', 'Top', 100);
Free;
end;
Numkeys[1].vkey := Ord('1');
Numkeys[2].vkey := Ord('2');
Numkeys[3].vkey := Ord('3');
Numkeys[4].vkey := Ord('4');
Numkeys[5].vkey := Ord('5');
Numkeys[6].vkey := Ord('6');
Numkeys[7].vkey := Ord('7');
Numkeys[8].vkey := Ord('8');
Numkeys[9].vkey := Ord('9');
Numkeys[10].vkey := Ord('0');
SetLength(AKEYList, 1);
end;
procedure TForm1.FormShow(Sender: TObject);
var IniFile: TIniFile;
begin
IniFile := TiniFile.Create(FPath + 'Config.ini');
with IniFile do begin
eAutoMagic.ItemIndex := ReadInteger('Config', 'AutoMagic', 0);
Magic1.ItemIndex := ReadInteger('Config', 'Magic1', 0);
Magic2.ItemIndex := ReadInteger('Config', 'Magic2', 0);
Magic3.ItemIndex := ReadInteger('Config', 'Magic3', 0);
Magic4.ItemIndex := ReadInteger('Config', 'Magic4', 0);
ComboBox4.ItemIndex := ReadInteger('Config', 'Magic7', 7) - 1;
UpDown1.Position := ReadInteger('CONFIG', 'MagicGap', 1200);
UpDown2.Position := ReadInteger('CONFIG', 'AutoMagicGap', 1300);
UpDown3.Position := ReadInteger('CONFIG', 'MagicGap7', 30);
UpDown4.Position := ReadInteger('CONFIG', 'whileGJ', 20);
mX := ReadInteger('CONFIG', 'MouseX', 995);
mY0 := ReadInteger('CONFIG', 'MouseY0', 648);
mY1 := ReadInteger('CONFIG', 'MouseY1', 245);
mY2 := ReadInteger('CONFIG', 'MouseY2', 290);
mY3 := ReadInteger('CONFIG', 'MouseY3', 340);
mY4 := ReadInteger('CONFIG', 'MouseY4', 380);
mY5 := ReadInteger('CONFIG', 'MouseY5', 422);
mY6 := ReadInteger('CONFIG', 'MouseY6', 465);
mY7 := ReadInteger('CONFIG', 'MouseY7', 515);
mY8 := ReadInteger('CONFIG', 'MouseY8', 555);
mY9 := ReadInteger('CONFIG', 'MouseY9', 605);
UseWindowMode := ReadInteger('CONFIG', 'UseWindowMode', 0) = 1;
GameTitle := ReadString('CONFIG', 'GameTitle', 'Pigeon');
Free;
end;
Numkeys[1].x := mX;
Numkeys[1].y := mY1;
Numkeys[2].x := mX;
Numkeys[2].y := mY2;
Numkeys[3].x := mX;
Numkeys[3].y := mY3;
Numkeys[4].x := mX;
Numkeys[4].y := mY4;
Numkeys[5].x := mX;
Numkeys[5].y := mY5;
Numkeys[6].x := mX;
Numkeys[6].y := mY6;
Numkeys[7].x := mX;
Numkeys[7].y := mY7;
Numkeys[8].x := mX;
Numkeys[8].y := mY8;
Numkeys[9].x := mX;
Numkeys[9].y := mY9;
Numkeys[10].x := mX;
Numkeys[10].y := mY0;
end;
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
if CheckBox2.Checked then begin
CheckBox2.Caption := '启动';
if not Timer2.Enabled then BeginGJ;
end else begin
CheckBox2.Caption := '停止';
if Timer2.Enabled then BeginGJ;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -