Combined function verification memory
// 1. FindWindow // obtain the window handle
// 2. GetWindowThreadProcessId // obtain the window process ID
// 3. OpenProcess // open the specified process
// 4. ReadProcessMemory // read the memory data of the specified process
HWND gameh =: FindWindow (NULL, title );
DWORD processid;
: GetWindowThreadProcessId (handle, & processid );
HANDLE processH =: OpenProcess (PROCESS_ALL_ACCESS, false, processid); // processid indicates the return value of the previous function.
DWORD byread;
LPCVOID pbase = (LPCVOID) 0x00B8D8E0; // data address
LPVOID nbuffer = (LPVOID) & m_num; // bound class member variable
: ReadProcessMemory (processH, pbase, nbuffer, 4, & byread); // processH indicates the return value of the previous function.
// Parameter 4 indicates the number of bytes read.
UpdateData (false );
The problem with MSDN is summarized here.