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

📄 unit1.pas

📁 墨香外挂源码!!有兴趣的人下载来研究研究巴
💻 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 + -