求解ReadProcessMemory问题
梦哲 2016-01-21 05:26:08 [DllImport("kernel32.dll")]
public static extern void CloseHandle(IntPtr hObject);
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll")]
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int nSize, IntPtr lpNumberOfBytesRead);
private int baseaddress = 0;
private void Form1_Load(object sender, EventArgs e)
{
}
/// <summary>
/// 获取进程id
/// </summary>
/// <param name="proName"></param>
/// <returns></returns>
private int GetProcessID(string proName)
{
Process[] processArray2 = Process.GetProcessesByName(proName);
int index = 0;
while (index < processArray2.Length)
{
Process process = processArray2[index];
return process.Id;
}
return 0;
}
private void button1_Click(object sender, EventArgs e)
{
int hp = ReadMemoryValue("DNF",0);
textBox1.Text = hp.ToString();
}
public int ReadMemoryValue(string processName, int baseAdd)
{
byte[] arr = new byte[40];
IntPtr lpBuffer = Marshal.UnsafeAddrOfPinnedArrayElement(arr, 0);
IntPtr hProcess = Function.OpenProcess(0x1f0fff, false, this.GetProcessID(processName));
Function.ReadProcessMemory(hProcess, (IntPtr)baseAdd, lpBuffer, 4, IntPtr.Zero);
CloseHandle(hProcess);
return Marshal.ReadInt32(lpBuffer);
}
我得到的值都是0