Solo se completó parcialmente readprocessmemoty o writeprocessmemory
Es necesario destacar dos puntos: 1. Al abrir un proceso, la memoria virtual debe configurarse para que sea operable, escribible y legible. Si solo se puede escribir, ReadProcessMemory leerá incorrectamente. 2. Esta memoria debe ser liberada.
Lo siguiente es parte del programa: Programa CLIENTE: #define WM_COMPAREIMAGE WM_USER +100 void CTestCompareDlg::OnBnClickedButton1() { HANDLE hProcess = NULL; DWORD dwProcessId = 0; (hServerWnd = = NULL) { //Necesita crear el retorno del proceso } ::GetWindowThreadProcessId(hServerWnd,&dwProcessId); hProcess = OpenProcess(PROCESS_VM_OPERATION| PROCESS_VM_WRITE|PROCESS_VM_READ,FALSE,dwProcessId); * pMyInfo = NULL; pMyInfo = (MyInfo *)VirtualAllocEx(hProcess,NULL, sizeof(MyInfo),MEM_COMMIT,PAGE_READWRITE); if(pMyInfo == NULL) return; ; WriteProcessMemory( hProcess,pMyInfo,&myInfo,sizeof(MyInfo),NULL); ::SendMessage(hServerWnd,WM_COMPAREIMAGE,sizeof(MyInfo),(LPARAM)pMyInfo; (hProcess, pMyInfo,&myInfo2,sizeof(MyInfo),&dwRead); dwRead = GetLastError(); m_log.Format("rojo =%.2f,azul=%.2f",myInfo2.blue,myInfo2.red); m_log); VirtualFreeEx(hProcess,pMyInfo,0,MEM_RELEASE); UpdateData(FALSE); } programa SERVIDOR: LRESULT CMyWindow::OnCompareImage(HWND hWnd,WPARAM wParam,LPARAM lParam) { if(wParam
lue); ::TextOut(GetDC(hWnd),0,50,m_strLog,strlen(m_strLog)); pMyInfo->blue = 1.0; pMyInfo->red = 2.0; / compareserver.rar Referencia:/windcsn/archive/2006/04/20/5981.aspx