系统win764位、MFC应用程序、VS2010
----加血--------
HWND h; //窗口变量
h=::FindWindow(NULL,"BloodGame"); //查找窗口句柄需要全局标识符
DWORD id; //进程ID
LPDWORD Pid=&id; //定义临时变量方便调用
::GetWindowThreadProcessId(h,Pid); //取得指定窗口的进程ID 存放到变量id里边
HANDLE hp=OpenProcess(PROCESS_ALL_ACCESS,false,id);//获取访问进程权限 存放至hp
DWORD tid; //定义临时变量方便调用
CreateRemoteThread(hp,NULL,0,(LPTHREAD_START_ROUTINE)0x413440 ,NULL,0,&tid);
----结束加血----
自己写的客户端----加血------
void CBloodGameDlg::OnBnClickedButtonAdd()
{
// TODO: 在此添加控件通知处理程序代码
blood += 22;
char buffer[10];
_itoa( blood, buffer, 10 );
m_blood.SetWindowText(buffer);
}
------结束----------
远程加血之后执行到 m_blood.SetWindowText(buffer);时临时变量值为
this 0x00000000{CBloodGameDlg hWnd=???}
buffer 0x0273ff68 "3044"
然后执行到void CWnd::SetWindowText(LPCTSTR lpszString)
{
ENSURE(this);
ENSURE(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));
if (m_pCtrlSite == NULL)
::SetWindowText(m_hWnd, lpszString);
else
m_pCtrlSite->SetWindowText(lpszString);
}
到ENSURE(this);时临时变量值
this 0x000000bc{CWnd hWnd=???}
lpszString 0x0273ff68"3044"
接着执行出现错误:BloodGame.exe 中的 0x5828f363 (mfc100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x000000dc 时发生访问冲突
这个应该怎么解决呢?this指针的值怎么不知道呢?
------解决方案--------------------------------------------------------
m_blood.SetWindowText(buffer);
改成
::SetDlgItemInt(::FindWindow(NULL,"BloodGame"), ID自己查resource.h文件, blood, FALSE);
这就不会错了