10 个解决方案
#1
通过FindWindow,取到Msg的句柄。
然后PostMessage或SendMessage,发送WM_CLOSE消息。
然后PostMessage或SendMessage,发送WM_CLOSE消息。
#2
创建一个线程去显示MessageBox,调用线程的后面等待事件,超时后结束线程。
这样试试。
这样试试。
#3
忘了说Timer了,在MessageBox弹出前启动Timer,设定好时间,再按照我在1楼的描述操作即可。
#4
HWND hd = ::FindWindow(_T("MessageBox"),NULL);
::SendMessage(hd,WM_CLOSE,0,0);
这样对不? 怎么没有效果呢
::SendMessage(hd,WM_CLOSE,0,0);
这样对不? 怎么没有效果呢
#5
估计是句柄取的不对。
FindWindow第一个参数,要用Messagebox中的caption字符串。
FindWindow第一个参数,要用Messagebox中的caption字符串。
#6
用caption 也获取不到句柄啊
void CTestMessageDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
SetTimer(1,2000,0);
::MessageBox(this->m_hWnd,L"123",L"123",MB_OK);
}
void CTestMessageDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
HWND hd = ::FindWindow(_T("123"),NULL);
::PostMessage(hd,WM_CLOSE,0,0);
CDialog::OnTimer(nIDEvent);
}
void CTestMessageDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
SetTimer(1,2000,0);
::MessageBox(this->m_hWnd,L"123",L"123",MB_OK);
}
void CTestMessageDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
HWND hd = ::FindWindow(_T("123"),NULL);
::PostMessage(hd,WM_CLOSE,0,0);
CDialog::OnTimer(nIDEvent);
}
#7
还有一种方法就是自己封装一个DIALOGBOX,也可以实现你想要达到的要求。
#8
sendmessage()可行么?
#9
楼主先确认,句柄取到没有?
#10
实现了,
HWND hd = ::FindWindow(_T("123"),NULL);
应该写成这样:
HWND hd = ::FindWindow(NULL,_T("123"));
然后就好了
HWND hd = ::FindWindow(_T("123"),NULL);
应该写成这样:
HWND hd = ::FindWindow(NULL,_T("123"));
然后就好了
#1
通过FindWindow,取到Msg的句柄。
然后PostMessage或SendMessage,发送WM_CLOSE消息。
然后PostMessage或SendMessage,发送WM_CLOSE消息。
#2
创建一个线程去显示MessageBox,调用线程的后面等待事件,超时后结束线程。
这样试试。
这样试试。
#3
忘了说Timer了,在MessageBox弹出前启动Timer,设定好时间,再按照我在1楼的描述操作即可。
#4
HWND hd = ::FindWindow(_T("MessageBox"),NULL);
::SendMessage(hd,WM_CLOSE,0,0);
这样对不? 怎么没有效果呢
::SendMessage(hd,WM_CLOSE,0,0);
这样对不? 怎么没有效果呢
#5
估计是句柄取的不对。
FindWindow第一个参数,要用Messagebox中的caption字符串。
FindWindow第一个参数,要用Messagebox中的caption字符串。
#6
用caption 也获取不到句柄啊
void CTestMessageDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
SetTimer(1,2000,0);
::MessageBox(this->m_hWnd,L"123",L"123",MB_OK);
}
void CTestMessageDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
HWND hd = ::FindWindow(_T("123"),NULL);
::PostMessage(hd,WM_CLOSE,0,0);
CDialog::OnTimer(nIDEvent);
}
void CTestMessageDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
SetTimer(1,2000,0);
::MessageBox(this->m_hWnd,L"123",L"123",MB_OK);
}
void CTestMessageDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
HWND hd = ::FindWindow(_T("123"),NULL);
::PostMessage(hd,WM_CLOSE,0,0);
CDialog::OnTimer(nIDEvent);
}
#7
还有一种方法就是自己封装一个DIALOGBOX,也可以实现你想要达到的要求。
#8
sendmessage()可行么?
#9
楼主先确认,句柄取到没有?
#10
实现了,
HWND hd = ::FindWindow(_T("123"),NULL);
应该写成这样:
HWND hd = ::FindWindow(NULL,_T("123"));
然后就好了
HWND hd = ::FindWindow(_T("123"),NULL);
应该写成这样:
HWND hd = ::FindWindow(NULL,_T("123"));
然后就好了