diff --git a/Bin/net40/SunnyUI.dll b/Bin/net40/SunnyUI.dll
index 82bf8599..689f2525 100644
Binary files a/Bin/net40/SunnyUI.dll and b/Bin/net40/SunnyUI.dll differ
diff --git a/SunnyUI/Win32/Win32.Added.cs b/SunnyUI/Win32/Win32.Added.cs
index ebc16565..02215954 100644
--- a/SunnyUI/Win32/Win32.Added.cs
+++ b/SunnyUI/Win32/Win32.Added.cs
@@ -1,4 +1,5 @@
using System;
+using System.Diagnostics;
using System.Drawing;
using System.Runtime.InteropServices;
@@ -12,6 +13,70 @@ namespace Sunny.UI.Win32
{
return new IntPtr(value);
}
+
+ //根据进程名获取PID
+ public static int GetPidByProcessName(string processName)
+ {
+ Process[] arrayProcess = Process.GetProcessesByName(processName);
+ foreach (Process p in arrayProcess)
+ {
+ return p.Id;
+ }
+ return 0;
+ }
+
+ ///
+ /// 读取指定进程内存中的值
+ ///
+ ///
+ ///
+ ///
+ public static void ReadMemoryValue(string processName, int baseAddress, ref byte[] buffer)
+ {
+ try
+ {
+ //获取缓冲区地址
+ IntPtr byteAddress = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0);
+ //打开一个已存在的进程对象 0x1F0FFF 最高权限
+ IntPtr hProcess =Kernel.OpenProcess(0x1F0FFF, false, GetPidByProcessName(processName));
+ //将制定内存中的值读入缓冲区
+ Kernel.ReadProcessMemory(hProcess, (IntPtr)baseAddress, byteAddress, buffer.Length,System.IntPtr.Zero);
+ //关闭操作
+ Kernel.CloseHandle(hProcess);
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine(e.Message);
+ }
+ }
+
+ ///
+ /// 将值写入指定进程内存地址中
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static int WriteMemoryValue(string processName, int baseAddress, byte[] buffer)
+ {
+ try
+ {
+ //获取缓冲区地址
+ IntPtr byteAddress = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0);
+ //打开一个已存在的进程对象 0x1F0FFF 最高权限
+ IntPtr hProcess = Kernel.OpenProcess(0x1F0FFF, false, GetPidByProcessName(processName));
+ int count = 0;
+ //从指定内存中写入字节集数据
+ Kernel.WriteProcessMemory(hProcess, (IntPtr)baseAddress, byteAddress, buffer.Length, ref count);
+ //关闭操作
+ Kernel.CloseHandle(hProcess);
+ return count;
+ }
+ catch
+ {
+ return 0;
+ }
+ }
}
public partial class GDI
@@ -104,6 +169,13 @@ namespace Sunny.UI.Win32
[DllImport("kernel32")]
public static extern int GetPrivateProfileString(byte[] section, byte[] key, byte[] def, byte[] retVal, int size, string filePath);
+ //打开一个已存在的进程对象,并返回进程的句柄
+ [DllImportAttribute("kernel32.dll", EntryPoint = "OpenProcess")]
+ public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
+
+ //从指定内存中读取字节集数据
+ [DllImport("kernel32.dll", EntryPoint = "ReadProcessMemory")]
+ public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int nSize, IntPtr lpNumberOfBytesRead);
}
public partial class WinMM