下面的程序从5种方法,关闭弹出的MessageBox对话框:
首先,创建定时器和弹出MessageBox:
void CTestDlg::OnBnClickedButton1() { //启动一个定时器,用于自动触发关闭MessageBox对话框 SetTimer(1, 1000, NULL); //启动一个MessageBox对话框,并检查它的返回值 int ret = MessageBox("Hello", "MyMessageBox", MB_YESNO); if (ret == IDYES) { TRACE("按钮【YES】被按下\n"); } else if(ret == IDNO) { TRACE("按钮【NO】被按下\n"); } }
void CTestDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nIDEvent == 1) { HANDLE hWnd = ::FindWindowEx(NULL, NULL, NULL, "MyMessageBox"); //HANDLE hWnd = ::GetForegroundWindow(); if (hWnd) { TRACE("发现了MyMessageBox窗口\n"); // // 第一种方法:直接发送 WM_CLOSE 消息。 // ::SendMessage((HWND)hWnd, WM_CLOSE, NULL, NULL); // // 第二种方法: // ::EndDialog((HWND)hWnd, IDNO); // // 第三种方法:模拟窗口消息点击了【IDNO】按钮 // HWND h = ::GetDlgItem((HWND)hWnd, IDNO); if(h) { TRACE("找到了IDNO控件窗口\n"); ::PostMessage((HWND)hWnd, WM_COMMAND, MAKEWPARAM(IDNO, BN_CLICKED), (LPARAM)h); } // // 第四种方法:模拟鼠标移到了【IDNO】按钮上点击 // HWND h = ::GetDlgItem((HWND)hWnd, IDNO); if(h) { TRACE("找到了IDNO控件窗口\n"); POINT pt; CRect rc; ::GetWindowRect(h, &rc); pt.x = rc.left+10; pt.y = rc.top+10; SetCursorPos(pt.x, pt.y);//鼠标移到了【IDNO】按钮上 //完成点击 mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_ABSOLUTE, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP|MOUSEEVENTF_ABSOLUTE, 0, 0, 0, 0); } // // 第五种方法:模拟键盘回车关闭对话框 // keybd_event(VK_RETURN, 0, 0,0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP,0); } } CDialog::OnTimer(nIDEvent); }