首先,创建定时器和弹出MessageBox:
void CTestDlg::Test()
{
//启动定时器
SetTimer(111,1000,NULL);
int ret = MessageBox("Hello World", "MyTestBox", MB_YESNO);
if(ret == IDYES)
{
TRACE("按钮【YES】被按下\n");
}
else if(ret == IDNO)
{
TRACE("按钮【NO】被按下\n");
}
}
然后,定时器的实现
void CTestDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (nIDEvent == 111)
{
HANDLE hWnd = ::FindWindowEx(NULL, NULL, NULL, "MyTestBox");
//HANDLE hWnd = ::GetForegroundWindow();
if (hWnd)
{
TRACE("发现了MyTestBox窗口\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);
}
即可实现自动关闭弹出MessageBox对话框