我在做一个过滤IE 广告窗口的小程序,是为了练习WINDOWS编程. 以下是我的程序核心代码,能找到要关闭的IE窗口的代码,但是不能关闭它,各位老大,请帮忙看看. void CIePopWndDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
HWND IeWnd=NULL, TempWnd;
//CWnd *MainFrameWnd;
CString strClassName;
int WndClassNameLength;
TempWnd=::GetForegroundWindow();//获得用户当前工作的窗口的句柄
IeWnd=TempWnd;
//TempWnd=MainFrameWnd->FromHandle(
if(::IsWindow(TempWnd))
WndClassNameLength=GetClassName(IeWnd,strClassName.GetBufferSetLength(100),100);//取得窗口类名长度
strClassName.Left(WndClassNameLength);//获得窗口类名
if(strClassName=="IEFrame")
{ //AfxMessageBox("窗口是ie窗口");
HWND ChildWnd;
if((GetWindowLong(IeWnd,GWL_STYLE)&WS_MAXIMIZEBOX))
{
do
{
ChildWnd=FindChildWnd(TempWnd);
TempWnd=ChildWnd;
}
while(::IsWindow(ChildWnd)&&ChildWnd==NULL);
}
else
{
CWnd* pTempWnd=CWnd::FromHandle(IeWnd);//获得要销毁的窗口指针
AfxMessageBox("窗口是无最大化按钮");
pTempWnd->PostMessage(WM_CLOSE,0,0);
//::DestroyWindow(IeWnd);
//::closehandle(IeWnd);
//::SendMessage(IeWnd,WM_DESTROY,NULL);
//发现是弹出广告窗口就发送销毁窗口的消息
}
}
CDialog::OnTimer(nIDEvent);
}
/////////////////////////////////////////////////////////////////////////////
pTempWnd->PostMessage(WM_CLOSE,0,0);
::DestroyWindow(IeWnd);
::closehandle(IeWnd);
::SendMessage(IeWnd,WM_DESTROY,NULL);以上四个函数我都试过了都不能销毁那个已经找到句柄且要销毁的窗口, 请大家帮帮忙
{
// TODO: Add your message handler code here and/or call default
HWND IeWnd=NULL, TempWnd;
//CWnd *MainFrameWnd;
CString strClassName;
int WndClassNameLength;
TempWnd=::GetForegroundWindow();//获得用户当前工作的窗口的句柄
IeWnd=TempWnd;
//TempWnd=MainFrameWnd->FromHandle(
if(::IsWindow(TempWnd))
WndClassNameLength=GetClassName(IeWnd,strClassName.GetBufferSetLength(100),100);//取得窗口类名长度
strClassName.Left(WndClassNameLength);//获得窗口类名
if(strClassName=="IEFrame")
{ //AfxMessageBox("窗口是ie窗口");
HWND ChildWnd;
if((GetWindowLong(IeWnd,GWL_STYLE)&WS_MAXIMIZEBOX))
{
do
{
ChildWnd=FindChildWnd(TempWnd);
TempWnd=ChildWnd;
}
while(::IsWindow(ChildWnd)&&ChildWnd==NULL);
}
else
{
CWnd* pTempWnd=CWnd::FromHandle(IeWnd);//获得要销毁的窗口指针
AfxMessageBox("窗口是无最大化按钮");
pTempWnd->PostMessage(WM_CLOSE,0,0);
//::DestroyWindow(IeWnd);
//::closehandle(IeWnd);
//::SendMessage(IeWnd,WM_DESTROY,NULL);
//发现是弹出广告窗口就发送销毁窗口的消息
}
}
CDialog::OnTimer(nIDEvent);
}
/////////////////////////////////////////////////////////////////////////////
pTempWnd->PostMessage(WM_CLOSE,0,0);
::DestroyWindow(IeWnd);
::closehandle(IeWnd);
::SendMessage(IeWnd,WM_DESTROY,NULL);以上四个函数我都试过了都不能销毁那个已经找到句柄且要销毁的窗口, 请大家帮帮忙
如果要发送消息,因为你不知道目标窗口是如何处理该消息的,不是很好.我唯一能想到的办法就是强制关闭创建该窗口的线程,不过这好像很难办到!呵呵!
void CIePopWndDlg::OnTimer(UINT nIDEvent)
{
HWND IeWnd=NULL, TempWnd;
CString strClassName;
int WndClassNameLength;
TempWnd=::GetForegroundWindow();//获得用户当前工作的窗口的句柄
IeWnd=TempWnd;
if(::IsWindow(TempWnd))
WndClassNameLength=GetClassName(IeWnd,strClassName.GetBufferSetLength(100),100);//取得窗口类名长度
strClassName.Left(WndClassNameLength);//获得窗口类名
if(strClassName=="IEFrame")
PostMessage(IeWnd, WM_CLOSE,0,0);
}