做外挂小记(3)--C#调用读写内存类篇
http://hi.baidu.com/859729391/blog/item/d0465b86c252c72dc65cc3a5.html
这篇很简单了...呵呵......完全是C#知识,主要是如何调用方法..
我们可以把上面那一篇编译成一个dll类库来调用,,或者直接接着写..
那么我就直接写了...
public class test
{
string pid=getpid.pid;//取得pid
read_and_write.write(string pid,IntPtr address,int wordin)//调用写,没有返回值的
string a=read_and_write.write(string pid,IntPtr address,int wordin)//调用读,有返回值
//OK完了..变量请自己声明,呵呵...如何找内存地址实现乱飞呀,秒杀呀,啥的,就自己去外挂论坛
//看看咯...呵呵...}
}
下面我总结一下取得PID的集中方法
首先是通用的方法
就是通过API的FINDWINDOW一系列来获取
hand=FindWindow(NULL, "就上魔力");
//api的findwindow方法,其中两个参数是(类名,窗口名),只需要其中一个就能找到窗口句柄,没有那个可以
//填NULL,表示空...
GetWindowThreadProcessId(hand,&pidwin);//通过窗口句柄hand找到游戏pid
ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pidwin);//通过pid找到进程句柄,并且得到
其次就是C#的方法,当然C#也可以调用API来实现
public class getpid//定义取得pid的类
{ public string pid;//为了省事,我直接声明一个公共字段了,当然你也可以写属性写构造啦!
System.Diagnostics.Process[] processes = Process.GetProcesses();
//获得当前所有进程列表 ,注意是个数组,除非你的电脑只有一个进程
foreach (Process a in processes) //遍历每一个进程 ,如果出错请声明一下a
{
if(a.ProcessName.ToString()=="xxx.exe")//如果进程名等于xxx.exe,可以用资源管理器查看
{
pid= a.Id.ToString();//就输出他的pid,这样就可以获得pid了
//当然Process a的属性还有很多,总之很强大,例如 a.MachineName.ToString();//获取关联进程机器名
// a.MainWindowTitle.ToString();//获取主窗口的窗口名
//红色部分可以任意替换,如果你不知道进程名,知道窗口名,就用a.MainWindowTitle.ToString()="记事本"
}
最后C#还有另外一种方法,其代码如下(不做解释咯)
using System.Management;//需要此命名空间public int pid(String name)
{
try
{
string pid = "";
ObjectQuery oQuery = new ObjectQuery("select * from Win32_Process where Name='" + name + "'");
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oQuery);
ManagementObjectCollection oReturnCollection = oSearcher.Get();
foreach (ManagementObject oReturn in oReturnCollection)
{
pid = oReturn.GetPropertyValue("ProcessId").ToString();
}
return Convert.ToInt32(pid);
}
catch
{
MessageBox.Show("呵呵,你还没开游戏,我说得对不?");
Application.Exit();
return 0;
}
下一小记来说说封包类的.......目前正在学习中