如下程序所示,在vs2008的MFC中,用API函数打开QQ游戏连连看的进程,用cm软件读出座位号并显示,现下问题:
编译运行没有问题,但是不显示结果。用getlastmemory函数寻找错误。voidCllkDlg::OnBnClickedButton2(){//TODO:在此添加控件...
编译运行没有问题,但是不显示结果。用getlastmemory函数寻找错误。
void CllkDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
BOOL EnableDebugPrivilege();
HWND gameh=::FindWindow(NULL,"程序窗口标题"); //获取窗口句柄
(2)在别的地方如此提取得到的句柄,是可以用的
DWORD processID=0;
DWORD byread=0;//进程基址
LPCVOID pbase=(LPCVOID)0x0002D868;
LPVOID nbuffer=(LPVOID)&m_num;//建立一个缓冲区存放座位号的地址
this->m_num=::GetWindowThreadProcessId(NULL,&processID);//获取窗口进程ID
HANDLE processH=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,processID);
(3)此处调试可以察看processH的值,发现是0xcccccccc,但是到了下一行函数就自己变为0了。这是为什么?
::ReadProcessMemory(processH,pbase,nbuffer,4,&byread);
在此处用GetLastMemory函数显示,错误代码为6,显示窗口句柄无效,但是在上文(2)处的句柄是可以用的。难道是(3)处的错误?
UpdateData(FALSE);//表示将变量的值更新到编辑框中去
}
难道是现在QQ游戏加了保护不让打开读进程内存了?也有疑惑。
本人系初学者,有部分VC++基础,没有怎么接触过MFC,关于运用的各种函数也是找MSDN和别的辅助书籍随用随查。尝试编写这个是兴趣所致,在各种百度gooole和MSDN之后都没有找到解决办法,因此在这里寻求答案,诸位可给出合适解决方法的,谢谢了!! 展开
void CllkDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
BOOL EnableDebugPrivilege();
HWND gameh=::FindWindow(NULL,"程序窗口标题"); //获取窗口句柄
(2)在别的地方如此提取得到的句柄,是可以用的
DWORD processID=0;
DWORD byread=0;//进程基址
LPCVOID pbase=(LPCVOID)0x0002D868;
LPVOID nbuffer=(LPVOID)&m_num;//建立一个缓冲区存放座位号的地址
this->m_num=::GetWindowThreadProcessId(NULL,&processID);//获取窗口进程ID
HANDLE processH=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,processID);
(3)此处调试可以察看processH的值,发现是0xcccccccc,但是到了下一行函数就自己变为0了。这是为什么?
::ReadProcessMemory(processH,pbase,nbuffer,4,&byread);
在此处用GetLastMemory函数显示,错误代码为6,显示窗口句柄无效,但是在上文(2)处的句柄是可以用的。难道是(3)处的错误?
UpdateData(FALSE);//表示将变量的值更新到编辑框中去
}
难道是现在QQ游戏加了保护不让打开读进程内存了?也有疑惑。
本人系初学者,有部分VC++基础,没有怎么接触过MFC,关于运用的各种函数也是找MSDN和别的辅助书籍随用随查。尝试编写这个是兴趣所致,在各种百度gooole和MSDN之后都没有找到解决办法,因此在这里寻求答案,诸位可给出合适解决方法的,谢谢了!! 展开
展开全部
此消息处理函数的出错在于(3),0xcccccccc是因为响应变量还不存在的原因,执行完改行,变量被定义,同时被置为函数返回值0,即NULL;说明回去句柄不成功。这样到下面就必然会出错。
至于为啥有PID获取句柄不成功,印象中你的processID只是窗口资源标识,其为0代表主窗口(好像是,没查书)。但在进程API操作时0代表的是在任务管理器里出现的进程ID,0号进程好像属于内核态,你用户态的应用程序想得到内核态进程的句柄的所有操作权,正常渠道是不可能的。
其中一种解决方案是,将MFC进程附加到目标进程,对目标进程进行调试,这样你就可以操作目标进程的地址空间,依你所言,估计这种解决方案对你难度比较大,阿门。。。
至于为啥有PID获取句柄不成功,印象中你的processID只是窗口资源标识,其为0代表主窗口(好像是,没查书)。但在进程API操作时0代表的是在任务管理器里出现的进程ID,0号进程好像属于内核态,你用户态的应用程序想得到内核态进程的句柄的所有操作权,正常渠道是不可能的。
其中一种解决方案是,将MFC进程附加到目标进程,对目标进程进行调试,这样你就可以操作目标进程的地址空间,依你所言,估计这种解决方案对你难度比较大,阿门。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询