唐朝程序员

我来自唐朝

C#游戏外挂代码(转载)




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 窗体设计器生成的代码 

/// <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级)外挂配置,配置文件随着各人级别不同和技能不同自己做修改。 


附加我从12级开始外挂的配置文件 

<?xml version="1.0"?> 
<TantraConfig xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<KillControls> 
<ControlItem> 
<Name>选择最近的攻击目标</Name> 
<KeyChar>69</KeyChar> 
<DelayTime>50</DelayTime> 
</ControlItem> 
<ControlItem> 
<Name>攻击选定的目标</Name> 
<KeyChar>82</KeyChar> 
<DelayTime>5000</DelayTime> 
</ControlItem> 
<ControlItem> 
<Name>捡起打完怪物掉下的物品</Name> 
<KeyChar>70</KeyChar> 
<DelayTime>500</DelayTime> 
</ControlItem> 
<ControlItem> 
<Name>捡起打完怪物掉下的金币</Name> 
<KeyChar>70</KeyChar> 
<DelayTime>500</DelayTime> 
</ControlItem> 
</KillControls> 
<BloodControls> 
<ControlItem> 
<Name>自动增加体能秘技</Name> 
<KeyChar>49</KeyChar> 
<DelayTime>1000</DelayTime> 
</ControlItem> 
</BloodControls> 
<BloodRate>20</BloodRate> 
<ProcessName>HTLauncher</ProcessName> 
</TantraConfig> 

严重推荐兄弟们累的时候,玩玩这个游戏,号称永久免费的哦 

posted on 2007-01-27 18:51  唐朝程序员  阅读(6784)  评论(3编辑  收藏  举报

导航