========================================
右下角是一个标签
我们还需要给标签添加一个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);
}