求解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
...全文
143 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
可能有保护,或者.OpenProcess(0x1f0fff, 这个权限达不到,有现成的cheat工具,干嘛要自己写
马少华 2016-01-22
  • 打赏
  • 举报
回复
先研究一下如何过tp 腾讯的游戏不是这么容易读得到内存的。
Poopaye 2016-01-21
  • 打赏
  • 举报
回复
用GetLastError去查问题

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧