15,473
社区成员




void CXXXXDlg::OnBnClickedBmodifymem()
{
////HWND hwnd = ::FindWindow(NULL, "1.txt - 记事本"); //窗口标题
CWnd* myWnd = FindWindow(NULL, "修改某进程内存的代码(C++).txt - 记事本"); //窗口标题
//CWnd* myWnd = FindWindow(NULL, "无标题 - Test"); //窗口标题
//CWnd* myWnd = FindWindow(NULL, "无标题"); //因为窗口标题是“无标题 - Test”,所以打开进程失败
HWND hwnd = myWnd->GetSafeHwnd();
DWORD dwProcessId;
GetWindowThreadProcessId(hwnd, &dwProcessId);
//::GetWindowThreadProcessId(hwnd,&dwProcessId);
CString strTemp;
strTemp.Format("%d",dwProcessId);
AfxMessageBox(strTemp);
//HANDLE hProcess = OpenProcess(PROCESS_VM_WRITE | PROCESS_VM_READ | PROCESS_VM_OPERATION, FALSE, dwProcessId);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
if (hProcess!=NULL)
{
AfxMessageBox("获取进程句柄成功!");
}
else
{
AfxMessageBox("获取进程句柄失败!");
return;
}
//PVOID pDestination = (PVOID)(0x0047B382);
//BYTE MyData[5] = {0x4c, 0xff, 0x64, 0x00, 0x2f};
LPVOID pDestination = (LPVOID)(0x0730);
BYTE MyData =0x00;
DWORD dwNumberOfBytesRead,dwNumberOfBytesWrite;
BOOL fSuccess = WriteProcessMemory(hProcess, pDestination, (LPVOID)MyData, 1, &dwNumberOfBytesWrite);//写入内存
if (fSuccess!=NULL)
{
AfxMessageBox("写入内存成功!");
}
else
{
AfxMessageBox("写入内存失败!");
CString strTemp;
strTemp.Format("dwNumberOfBytesWrite==%d",dwNumberOfBytesWrite);
AfxMessageBox(strTemp);
}
//测试,读也不成功,为什么?
ReadProcessMemory(hProcess,pDestination, (LPVOID)MyData, 1, &dwNumberOfBytesRead);
//CString strTemp;
strTemp.Format("dwNumberOfBytesRead==%d,MyData=%d",dwNumberOfBytesRead,MyData);
AfxMessageBox(strTemp);
}