void CSdfDlg::OnButton2()  
{
// TODO: Add your control notification handler code here
HWND hwnd;
hwnd=::FindWindow(NULL,WndName);
DWORD pid;
::GetWindowThreadProcessId(hwnd,&pid);
HANDLE Process;
Process=::OpenProcess(PROCESS_ALL_ACCESS,false,pid);
int sum;
TCHAR buf[10];
::ReadProcessMemory(Process,(LPCVOID)(0x006a9ec0),&sum,4,0);
::ReadProcessMemory(Process,(LPCVOID)(sum+0x82c),&sum,4,0);
::ReadProcessMemory(Process,(LPCVOID)(sum+0x28),&sum,4,0);
_itoa(sum,buf,10);
::SetWindowText(m_edit2_hwnd,buf);
}
上面的ReadProcessMemory能读出来,但是WriteProcessMemory错误????
还有为什么我这样写入不行,连接的程序直接退出了?
void CSdfDlg::OnButton3()  
{
// TODO: Add your control notification handler code here
HWND hwnd;
hwnd=::FindWindow(NULL,WndName);
DWORD pid;
::GetWindowThreadProcessId(hwnd,&pid);
HANDLE Process;
Process=::OpenProcess(PROCESS_ALL_ACCESS,false,pid);
int sum=3000;
::WriteProcessMemory(Process,(LPVOID)(0x006a9ec0),&sum,4,0);
::WriteProcessMemory(Process,(LPVOID)(sum+0x82c),&sum,4,0);
::WriteProcessMemory(Process,(LPVOID)(sum+0x28),&sum,4,0);
}
 
 
 

解决方案 »

  1.   

    ::WriteProcessMemory(Process,(LPVOID)(sum+0x82c),&sum,4,0);你上面的地址正确?确定可写?
      

  2.   

    首先确保Process=::OpenProcess(PROCESS_ALL_ACCESS,false,pid);中的process有效,进行一行判断是否为0,GetLastError()查错。
    关键是你写入的地址,这个很重要,有些地址是不能写的,会出错,完了你在拿GetLastError查查错误。
      

  3.   

    Process有效的,地址也是没有错的,这个地址是植物大战阳光的地址,我用
    Process=::OpenProcess(PROCESS_ALL_ACCESS,false,pid);
    int sum;
    TCHAR buf[10];
    ::ReadProcessMemory(Process,(LPCVOID)(0x006a9ec0),&sum,4,0);
    ::ReadProcessMemory(Process,(LPCVOID)(sum+0x82c),&sum,4,0);
    ::ReadProcessMemory(Process,(LPCVOID)(sum+0x28),&sum,4,0);
    _itoa(sum,buf,10);
    ::SetWindowText(m_edit2_hwnd,buf);
    是能读出来的,但是写入就是不行,网上查的那些都是答非所问
      

  4.   

    ::ReadProcessMemory(Process,(LPCVOID)(sum+0x82c),&sum,4,0);
    你这句就有问题啊,我晕,sum+0x82c啥意思,sum你只声明了就没定义,sum是一个随机数再加上0x82c你说等于啥,对不,你再看看。
    ::ReadProcessMemory(Process,(LPCVOID)(sum+0x28),&sum,4,0);
    而且sum是int类型
      

  5.   

    Process=::OpenProcess(PROCESS_ALL_ACCESS,false,pid);
    int sum;
    TCHAR buf[10];
    ::ReadProcessMemory(Process,(LPCVOID)(0x006a9ec0),&sum,4,0);
    ::ReadProcessMemory(Process,(LPCVOID)(sum+0x82c),&sum,4,0);
    ::ReadProcessMemory(Process,(LPCVOID)(sum+0x28),&sum,4,0);
    _itoa(sum,buf,10);
    ::SetWindowText(m_edit2_hwnd,buf);
    这个是对的,能读出阳光的数值.........
      

  6.   

    看明白了::ReadProcessMemory(Process,(LPCVOID)(sum+0x82c),&sum,4,0);
    这句是把sum的值加上0x82c
    你在写的时候是不是地址顺序不对,应该是这样
    ::WriteProcessMemory(Process,(LPVOID)(sum+0x28),&sum,4,0);
    ::WriteProcessMemory(Process,(LPVOID)(sum+0x82c),&sum,4,0);
    ::WriteProcessMemory(Process,(LPVOID)(0x006a9ec0),&sum,4,0);
    你读和写的顺序应该是相反的