做外挂小记(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;
               
            }

下一小记来说说封包类的.......目前正在学习中

posted on 2011-09-11 18:39  l1b2q31  阅读(1144)  评论(0编辑  收藏  举报

导航