void CZhensanDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
HANDLE processH=::OpenProcess(PROCESS_ALL_ACCESS,false,2772);
//读指定进程 内存数据
    DWORD byread;
LPCVOID pbase=(LPCVOID)0x0E6C02FC;
LPVOID  nbuffer=(LPVOID)&m_hp;
::ReadProcessMemory(processH,pbase,nbuffer,4,&byread);
UpdateData(false); //更新变量的值到编辑框}我建了一个基于对话框的MFC的EXE工程,上面添加了一个编辑框和按钮,给编辑框关联了一个变量UINT类型的m_hp,按钮的事件如上面所示。其中2772是我的魔兽进程ID,我 从任务管理器中看到的是2772,而0E6C02FC是我用CE察看到的魔兽真三国无双中存放诸葛亮血的地址(纯属个人学习娱乐,绝对没做任何坏事,其实我也没做坏事的能力,不要鄙视我,谢谢!)
在VC 6.0下成功编译,但是运行的时候编辑框里面什么都没有啊,请问问题出现在哪里,先说谢谢了!

解决方案 »

  1.   

    显示血的地址是不是动态的?
    调试一下 m_hp里面有没有值.
      

  2.   

    首先感谢你第一个回答,
    void CZhensanDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    //WriteProcessMemory(
    HANDLE processH=::OpenProcess(PROCESS_ALL_ACCESS,false,0x2772);
    //读指定进程 内存数据
        DWORD byread;
    LPCVOID pbase=(LPCVOID)0x0E6C02FC;
    LPVOID  nbuffer=(LPVOID)&m_hp;
    ::ReadProcessMemory(processH,pbase,nbuffer,4,&byread);
    UpdateData(false); //更新变量的值到编辑框}
    OX这个我加了也还是读取不出来内容啊?看来估计不是这个问题吧,这个只是一个进程ID。
      

  3.   

    进程的ID的话不应该是16进制,没必要加0x
      

  4.   

    每次运行的地址应该不一样吧????我不懂,随便说说!!!!PROCESSENTRY32 pe32;
    pe32.dwSize=sizeof(pe32);
    HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    if(hProcessSnap==INVALID_HANDLE_VALUE)
    {
    cout<<"CreateToolhelp32Snapshot调用失败!"<<endl;
    return -1;
    }
    //遍历进程快照,轮流显示每个进程的信息
    BOOL bmore=::Process32First(hProcessSnap,&pe32);
    while(bmore)
    {
    cout<<"进程的名称:"<<pe32.szExeFile<<endl;
    cout<<"进程的IDK号:"<<pe32.th32ProcessID<<endl;
    bmore=::Process32Next(hProcessSnap,&pe32);
    }
    //释放
    ::CloseHandle(hProcessSnap);这是对进程进行拍照,得到的是十进制的进程ID号
      

  5.   

    用spy++看看是否还有子窗口.handle的问题.
      

  6.   

    用Spy++ Lite 2.4 ,那个可以查控件句柄以及它的父句柄。
    用FindWindow()和FindWindowEx()来查具体的句柄,边查边对照运行结果。
      

  7.   

    看看汪艳平的Windows程序设计中的那个修改内存数据的例子
      

  8.   

    void CMoshowDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here HANDLE processH=::OpenProcess(PROCESS_ALL_ACCESS,false,3588);
    if(processH==NULL)
    AfxMessageBox("打开失败!");
    //读指定进程 内存数据
      DWORD byread;
    LPCVOID pbase=(LPCVOID)0x006C02FC;
    LPVOID nbuffer=(LPVOID)&m_value;
    ::ReadProcessMemory(processH,pbase,nbuffer,4,&byread);
    if(byread==0)
    AfxMessageBox("读取失败!");
    UpdateData(false); //更新变量的值到编辑框
    }我试了一下  程序没有问题,有可能的问题是:
    1.进程打开失败(主要看进程ID号是否对)
    2.读取内存失败(内存地址是否对)上面的程序已测试,编辑框中可以显示数值(非0),只是我无法测试显示数值是否正确!