句柄有关问题

句柄问题
HWND hWinPro=::FindWindow(NULL,"计算器");  
if(!hWinPro)
{
MessageBoxEx(NULL,("打开句柄失败"),("测试标题"),MB_OK,0);
return ;
}
DWORD pID;
DWORD p;
p=::GetWindowThreadProcessId(hWinPro,&pID);//后面参数是线程返回,前面是进程返回值
HANDLE hProcess = ::OpenProcess( PROCESS_ALL_ACCESS, FALSE,pID );
if(!hProcess)
{
MessageBoxEx(NULL,("打开线程句柄失败"),("测试标题"),MB_OK,0);
return ;
}
int value=0;
CString csText;
DWORD read=0x00A501C9;  
if(::ReadProcessMemory( hProcess,&read,&value,40))
{
MessageBoxEx(NULL,("错误"),("测试标题"),MB_OK,0);
}
csText.Format("%d",value);
m_list.AddString(csText);//m_list是一个listbox ,用来显示value 

  但是显示出来的 值 和实际的内存中的值 不一样 
会是哪的问题??


------解决方案--------------------
应该没问题,你再仔细看看。。
------解决方案--------------------
探讨
DWORD read=0x00A501C9;
if(::ReadProcessMemory( hProcess,&read,&value,40))


改成 ReadProcessMemory( hProcess,(LPCVOID)0x00A501C9,&value,4,0)就没问题了 有解释吗