C#游戏外挂代码

mac2022-06-30  37

XDF.GamePlugInCommon 类库项目  //API.cs 文件,定义一些常用API函数及常量  using System;  using System.IO;  using System.Threading;  using System.Diagnostics;  using System.Runtime.InteropServices;  namespace XDF.GamePlugInCommon  {  /** <summary>  /// API 的摘要说明。  /// </summary>  public sealed class API  {  public static int WM_KEYDOWN = 0x0100;  public static int WM_KEYUP = 0x0101;  public static int WM_SYSKEYDOWN = 0x0104;  public static int WM_SYSKEYUP = 0x0105;  public static int WM_MOUSEMOVE = 0x0200;  public static int WM_LBUTTONDOWN = 0x0201;  public static int WM_LBUTTONUP = 0x0202;  public static int WM_LBUTTONDBLCLK = 0x0203;  public static int WM_RBUTTONDOWN = 0x0204;  public static int WM_RBUTTONUP = 0x0205;  public static int WM_RBUTTONDBLCLK = 0x0206;  public static int WM_USER = 0x0400;  public static int MK_LBUTTON = 0x0001;  public static int MK_RBUTTON = 0x0002;  public static int MK_SHIFT = 0x0004;  public static int MK_CONTROL = 0x0008;  public static int MK_MBUTTON = 0x0010;  public static int MK_XBUTTON1 = 0x0020;  public static int MK_XBUTTON2 = 0x0040;  [DllImport("user32.dll")]  public static extern int SendMessage(IntPtr hWnd,int Msg,int wParam,int lParam);  //此处主要用来让窗口置于最前(SetWindowPos(this.Handle,-1,0,0,0,0,0x4000|0x0001|0x0002);)  [System.Runtime.InteropServices.DllImport("user32.dll")]  public static extern bool SetWindowPos(IntPtr hWnd,  int hWndInsertAfter,  int X,  int Y,  int cx,  int cy,  int uFlags  );  /** <summary>  /// 窗口置前  /// </summary>  /// <param name="hWnd"></param>  public static void SetWindowPos(IntPtr hWnd)  {  SetWindowPos(hWnd,-1,0,0,0,0,0x4000|0x0001|0x0002);  }  /** <summary>  ///  /// </summary>  /// <param name="processName"></param>  /// <returns></returns>  public static Process GetGameProcess(string processName)  {  Process pro = null;  Process[] pros = Process.GetProcessesByName(processName);  if(pros.Length > 0)  {  pro = pros[0];  }  return pro;  }  }  }  项目(应用程序)  XDF.TantraPlugIn  //ControlItem.cs  using System;  using System.IO;  using System.Xml.Serialization;  namespace XDF.TantraPlugIn  {  /** <summary>  /// ControlItem 的摘要说明。  /// </summary>  [Serializable]  public sealed class ControlItem  {  private string m_Name = "";  public string Name  {  get  {  return this.m_Name;  }  set  {  this.m_Name = value;  }  }  private char m_KeyChar = 'a';  public char KeyChar  {  get  {  return this.m_KeyChar;  }  set  {  this.m_KeyChar = value;  }  }  private int m_DelayTime = 100;  public int DelayTime  {  get  {  return this.m_DelayTime;  }  set  {  this.m_DelayTime = value;  }  }  public ControlItem()  {  }  }  [Serializable]  public sealed class ControlItemCollection : System.Collections.CollectionBase  {  public ControlItem this[int index]  {  get  {  return (ControlItem)List[index];  }  set  {  List[index] = value;  }  }  public ControlItemCollection()  {  }  public int Add(ControlItem item)  {  return List.Add(item);  }  public void Remove(ControlItem item)  {  List.Remove(item);  }  }  } //TantraConfig.cs  using System;  using System.IO;  using System.Xml.Serialization;  namespace XDF.TantraPlugIn  {  /** <summary>  /// TantraConfig 的摘要说明。  /// </summary>  [Serializable]  public class TantraConfig  {  private ControlItemCollection m_KillControls = new ControlItemCollection();  public ControlItemCollection KillControls  {  get  {  return this.m_KillControls;  }  set  {  this.m_KillControls = value;  }  }  private ControlItemCollection m_BloodControls = new ControlItemCollection();  public ControlItemCollection BloodControls  {  get  {  return this.m_BloodControls;  }  set  {  this.m_BloodControls = value;  }  }  private int m_BloodRate = 25;  public int BloodRate  {  get  {  return this.m_BloodRate;  }  set  {  this.m_BloodRate = value;  }  }  private string m_ProcessName = "HTLauncher";  public string ProcessName  {  get  {  return this.m_ProcessName;  }  set  {  this.m_ProcessName = value;  }  }  public TantraConfig()  {  }  public bool Save(string file)  {  bool result = false;  try  {  FileStream fs = new FileStream(file,FileMode.Create,FileAccess.Write);  XmlSerializer xsl = new XmlSerializer(this.GetType());  xsl.Serialize(fs,this);  fs.Close();  result = true;  }  catch  {  result = false;  }  return result;  }  public static TantraConfig LoadFromFile(string file)  {  TantraConfig config = null;  try  {  FileStream fs = new FileStream(file,FileMode.Open,FileAccess.Read);  XmlSerializer xsl = new XmlSerializer(typeof(TantraConfig));  config = (TantraConfig)xsl.Deserialize(fs);  fs.Close();  }  catch  {  }  return config;  }  }  }  //Frmmain.cs  using System;  using System.Drawing;  using System.Collections;  using System.ComponentModel;  using System.Windows.Forms;  using System.Data;  using System.Threading;  using XDF.GamePlugInCommon;  namespace XDF.TantraPlugIn  {  /** <summary>  /// Form1 的摘要说明。  /// </summary>  public class Frmmain : System.Windows.Forms.Form  {  private System.Windows.Forms.Button btnSetup;  private System.Windows.Forms.Timer timerMain;  private System.Windows.Forms.Button btnStart;  private System.ComponentModel.IContainer components;  public Frmmain()  {  //  // Windows 窗体设计器支持所必需的  //  InitializeComponent();  this.Closing +=new CancelEventHandler(Frmmain_Closing);  }  /** <summary>  /// 清理所有正在使用的资源。  /// </summary>  protected override void Dispose( bool disposing )  {  if( disposing )  {  if (components != null)  {  components.Dispose();  }  }  base.Dispose( disposing );  }  Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码  /** <summary>  /// 设计器支持所需的方法 - 不要使用代码编辑器修改  /// 此方法的内容。  /// </summary>  private void InitializeComponent()  {  this.components = new System.ComponentModel.Container();  System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Frmmain));  this.btnStart = new System.Windows.Forms.Button();  this.btnSetup = new System.Windows.Forms.Button();  this.timerMain = new System.Windows.Forms.Timer(this.components);  this.SuspendLayout();  //  // btnStart  //  this.btnStart.Location = new System.Drawing.Point(8, 16);  this.btnStart.Name = "btnStart";  this.btnStart.Size = new System.Drawing.Size(65, 22);  this.btnStart.TabIndex = 0;  this.btnStart.Text = "开始(&S)";  this.btnStart.Click += new System.EventHandler(this.btnStart_Click);  //  // btnSetup  //  this.btnSetup.Location = new System.Drawing.Point(152, 16);  this.btnSetup.Name = "btnSetup";  this.btnSetup.Size = new System.Drawing.Size(65, 22);  this.btnSetup.TabIndex = 1;  this.btnSetup.Text = "设置(&C)";  this.btnSetup.Click += new System.EventHandler(this.btnSetup_Click);  //  // Frmmain  //  this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);  this.ClientSize = new System.Drawing.Size(226, 55);  this.Controls.Add(this.btnSetup);  this.Controls.Add(this.btnStart);  this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;  this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));  this.MaximizeBox = false;  this.MinimizeBox = false;  this.Name = "Frmmain";  this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;  this.Text = "Tantra PlugIn beta1";  this.ResumeLayout(false);  }  #endregion  /** <summary>  /// 应用程序的主入口点。  /// </summary>  [STAThread]  static void Main()  {  Application.Run(new Frmmain());  }  private TantraConfig m_TantraConfig = null;  private Thread m_Thread = null;  private bool m_Stop = true;  private IntPtr m_GameMainWindowHandle = IntPtr.Zero;  private void btnSetup_Click(object sender, System.EventArgs e)  {  TantraConfig config = new TantraConfig();  ControlItemCollection items = config.KillControls;  ControlItem item_e = new ControlItem();  item_e.DelayTime = 50;  item_e.KeyChar = 'E';  item_e.Name = "选择最近的攻击目标";  items.Add(item_e);  ControlItem item_r = new ControlItem();  item_r.DelayTime = 6000;  item_r.KeyChar = 'R';  item_r.Name = "攻击选定的目标";  items.Add(item_r);  ControlItem item_f = new ControlItem();  item_f.DelayTime = 500;  item_f.KeyChar = 'F';  item_f.Name = "捡起打完怪物掉下的物品";  items.Add(item_f);  ControlItem item_f2 = new ControlItem();  item_f2.DelayTime = 500;  item_f2.KeyChar = 'F';  item_f2.Name = "捡起打完怪物掉下的金币";  items.Add(item_f2);  ControlItem item_blood = new ControlItem();  item_blood.DelayTime = 1000;  item_blood.KeyChar = '1';  item_blood.Name = "自动增加体能秘技";  config.BloodControls.Add(item_blood);  config.Save("c:\\tantra.xml");  }  private void btnStart_Click(object sender, System.EventArgs e)  {  if(this.m_Stop)  {  this.StartControl();  }  else  {  this.StopControl();  }  this.btnStart.Text = (this.m_Stop)?"开始(&S)":"停止(&S)";  }  private void StartControl()  {  string file = Environment.CurrentDirectory + "\\tantra.xml";  this.m_TantraConfig = TantraConfig.LoadFromFile(file);  if(this.m_TantraConfig == null)  {  MessageBox.Show("配置文件未找到,无法启动!");  return;  }  //HTLauncher  //string proname = "TantraPlugIn";  System.Diagnostics.Process pro = API.GetGameProcess(this.m_TantraConfig.ProcessName);  if(pro == null)  {  MessageBox.Show("游戏进程 "+this.m_TantraConfig.ProcessName+" 未找到,无法启动!");  return;  }  this.m_GameMainWindowHandle = pro.MainWindowHandle;  this.Text = "Game name:" + pro.ProcessName;  this.m_Stop = false;  this.m_Thread = new Thread(  new ThreadStart(TantraControl));  this.m_Thread.Start();  }  private void StopControl()  {  if(this.m_Thread != null)  {  this.m_Stop = true;  this.m_Thread.Abort();  }  }  private void TantraControl()  {  int count = 0;  while(!this.m_Stop)  {  for(int i=0;i<this.m_TantraConfig.KillControls.Count;i++)  {  API.SendMessage(this.m_GameMainWindowHandle,API.WM_KEYDOWN,  Convert.ToInt32(this.m_TantraConfig.KillControls[i].KeyChar),0);  Thread.Sleep(this.m_TantraConfig.KillControls[i].DelayTime);  }  count ++;  if(count >= this.m_TantraConfig.BloodRate)  {  count = 0;  for(int i=0;i<this.m_TantraConfig.BloodControls.Count;i++)  {  API.SendMessage(this.m_GameMainWindowHandle,API.WM_KEYDOWN,  Convert.ToInt32(this.m_TantraConfig.BloodControls[i].KeyChar),0);  Thread.Sleep(this.m_TantraConfig.BloodControls[i].DelayTime);  }  }  }  }  protected override void WndProc(ref Message m)  {  base.WndProc (ref m);  if(m.Msg == API.WM_KEYDOWN)  {  this.Text = m.WParam.ToInt32().ToString();  if(this.Text == "1")  {  MessageBox.Show("blood");  }  }  }  private void Frmmain_Closing(object sender, CancelEventArgs e)  {  try  {  this.StopControl();  }  catch  {  }  }  }  }  以上是全部代码  设置功能未完善,可以通过手动修改XML配置文件实现其他类似游戏的外挂  附带典型(12级)外挂配置,配置文件随着各人级别不同和技能不同自己做修改

转载于:https://www.cnblogs.com/webman/archive/2007/10/16/926752.html

相关资源:C#拼图游戏源代码(完整版)
最新回复(0)