• C#操作内存


    using System;
    using System.Text;

    using System.Diagnostics;
    using System.Runtime.InteropServices;

    namespace PlantsVsZombiesTool
    {
       
        publicabstractclass Helper
        {
            [DllImportAttribute("kernel32.dll", EntryPoint ="ReadProcessMemory")]
            publicstaticexternbool ReadProcessMemory
                (
                    IntPtr hProcess,
                    IntPtr lpBaseAddress,
                    IntPtr lpBuffer,
                    int nSize,
                    IntPtr lpNumberOfBytesRead
                );

            [DllImportAttribute("kernel32.dll", EntryPoint ="OpenProcess")]
            publicstaticextern IntPtr OpenProcess
                (
                    int dwDesiredAccess,
                    bool bInheritHandle,
                    int dwProcessId
                );

            [DllImport("kernel32.dll")]
            privatestaticexternvoid CloseHandle
                (
                    IntPtr hObject
                );

            //写内存
    [DllImportAttribute("kernel32.dll", EntryPoint ="WriteProcessMemory")]
            publicstaticexternbool WriteProcessMemory
                (
                    IntPtr hProcess,
                    IntPtr lpBaseAddress,
                    int[] lpBuffer,
                    int nSize,
                    IntPtr lpNumberOfBytesWritten
                );

            //获取窗体的进程标识ID
            publicstaticint GetPid(string windowTitle)
            {
                int rs =0;
                Process[] arrayProcess = Process.GetProcesses();
                foreach (Process p in arrayProcess)
                {
                    if (p.MainWindowTitle.IndexOf(windowTitle) !=-1)
                    {
                        rs = p.Id;
                        break;
                    }
                }

                return rs;
            }

            //根据进程名获取PID
            publicstaticint GetPidByProcessName(string processName)
            {
                Process[] arrayProcess = Process.GetProcessesByName(processName);

                foreach (Process p in arrayProcess)
                {
                    return p.Id;
                }
                return0;
            }

            //根据窗体标题查找窗口句柄(支持模糊匹配)
            publicstatic IntPtr FindWindow(string title)
            {
                Process[] ps = Process.GetProcesses();
                foreach (Process p in ps)
                {
                    if (p.MainWindowTitle.IndexOf(title) !=-1)
                    {
                        return p.MainWindowHandle;
                    }
                }
                return IntPtr.Zero;
            }

            //读取内存中的值
            publicstaticint ReadMemoryValue(int baseAddress,string processName)
            {
                try
                {
                    byte[] buffer =newbyte[4];
                    IntPtr byteAddress = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0); //获取缓冲区地址
                    IntPtr hProcess = OpenProcess(0x1F0FFF, false, GetPidByProcessName(processName));
                    ReadProcessMemory(hProcess, (IntPtr)baseAddress, byteAddress, 4, IntPtr.Zero); //将制定内存中的值读入缓冲区
                    CloseHandle(hProcess);
                    return Marshal.ReadInt32(byteAddress);
                }
                catch
                {
                    return0;
                }
            }

            //将值写入指定内存地址中
            publicstaticvoid WriteMemoryValue(int baseAddress, string processName, int value)
            {
                IntPtr hProcess = OpenProcess(0x1F0FFF, false, GetPidByProcessName(processName)); //0x1F0FFF 最高权限
                WriteProcessMemory(hProcess, (IntPtr)baseAddress, newint[] { value }, 4, IntPtr.Zero);
                CloseHandle(hProcess);
            }
        }
    }
  • 相关阅读:
    Myeclipse2013 SVN安装方法以及项目上传到svn服务器
    Gson把json串转换成java实体对象
    使用HttpClient向服务器发送restful post请求
    使用HttpURLConnection向服务器发送post和get请求
    http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/
    CAS单点登录配置[5]:测试与总结
    CAS单点登录配置[4]:客户端配置
    CAS单点登录配置[3]:服务器端配置
    CAS单点登录配置[2]:证书生成
    【Oracle/Java】向三张表各插入百万数据,共用时18分3秒,平均每张表6分钟
  • 原文地址:https://www.cnblogs.com/java20130723/p/3211502.html
Copyright © 2020-2023  润新知