_001_远程读取数值和远程发送消息

========================================

右下角是一个标签


我们还需要给标签添加一个int类型的变量

//发送窗口改变的消息
void C扫雷Dlg::OnBnClickedButton1()
{
	HWND h_wnd= ::FindWindowW(L"扫雷", L"扫雷");
	//1 窗口类名 2 窗口标题
	//返回窗口句柄
	//https://msdn.microsoft.com/zh-CN/library/windows/desktop/ms633499(v=vs.85).aspx
	
	if (h_wnd==0)
	{
		::MessageBoxW(0, L"没有找到窗口", 0, 0);
		return ;
	}
	::SendMessageW(h_wnd, WM_COMMAND, 0x20A, 0); //SendMessage需要等待指定程序处理完,并返回,这个函数才返回,执行下面的代码
	//1 窗口句柄                                  //可以使用PostMessage,无须等待指定程序处理完
	//2 要发送的消息类型
	//3 附加消息值
	//4 附加消息值2
	//https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms644950(v=vs.85).aspx
}

//远程读取数值
void C扫雷Dlg::OnBnClickedButton2()
{
	//获取窗口句柄
	HWND h_wnd = ::FindWindowW(L"扫雷", L"扫雷");

	//获取进程标识符pid
	DWORD pid;
	::GetWindowThreadProcessId(h_wnd, &pid);
	//1 窗口句柄
	//2 用于存储pid的变量
	//返回pid,如果参数2填写NULL,那么可以用返回值接受pid
	//https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms633522(v=vs.85).aspx

	//利用pid打开进程,获取进程句柄
  HANDLE  m_processHandle=::OpenProcess(PROCESS_ALL_ACCESS, false,pid);
	//1 访问权限,PROCESS_ALL_ACCESS 填写所有访问权限即可
	//2 继承句柄,填false即可
	//3 pid
	//https://docs.microsoft.com/zh-cn/windows/desktop/api/processthreadsapi/nf-processthreadsapi-openprocess

  if (m_processHandle == 0)
	  ::MessageBoxW(0, L"读取失败", 0, 0);


	//利用进程句柄远程读取数值
	ReadProcessMemory(m_processHandle,(void *)0x01005194,&m_saolei_value,4,NULL);
	//1 进程的句柄
	//2 要读取的指针(地址)
	//3 用于接受读取后的数值
	//4 读取几个字节数
	//5 实际读取了多少个字节数,用变量接受,可以忽略
	//当函数读取成功时返回1, 失败则返回0
	//https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms680553(v=vs.85).aspx

	//记得要更新下变量
	UpdateData(FALSE);

}









猜你喜欢

转载自blog.csdn.net/yzj17025693/article/details/80960580