zoukankan
html css js c++ java
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 窗体设计器生成的代码
#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级)外挂配置,配置文件随着各人级别不同和技能不同自己做修改。
附加我从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
>
严重推荐兄弟们累的时候,玩玩这个游戏,号称永久免费的哦
查看全文
相关阅读:
ubuntu开机启动
我的linux之路
继承
oracle 10g win7 win8 下的安装
Java 安全检测
BigDecimal 四舍五入
Java Map 便利
java split . |
java 爬虫 Jsoup
获取当前路径
原文地址:https://www.cnblogs.com/kokoliu/p/632097.html
最新文章
mysql 5.7全备脚本
Linux下keepalived配置
dbeaver 驱动安装
Linux下keepalived配置
linux下postgresql安装
WebService--axis
WebService--jax-spring集成
WebService--jax
配置mysql为主主复制步骤
mysql中的view(虚拟表)
热门文章
mysql中的trigger
mysql中的过程和函数
mysql中的日志
mysql中的索引
mysql中的内置函数
mysql中的操作符
mysql中的数据类型
mysql数据增删改查操作
mysql中的数据表操作
C# 引用自己添加的类库 引用不了 黄色感叹号
Copyright © 2011-2022 走看看