如何防止这个窗口显示

snowwood 2009-06-25 02:56:04
我的程序的界面上放了一个CHtmlView,当用它去连接一个网页时,Windows操作系统会弹出一个窗口,窗口的标题是“安全警报”,窗口上有三个按钮,分别是:是、否、查看证书。
我现在想要做的是,我的程序能自动执行这个窗口上的“是”按钮的功能。现在我的方法是这样的:
1.开启一个线程,每隔50毫秒查找一下是否弹出了“安全警报”窗口。
2.如果发现,则执行该窗口上的“是”按钮,窗口就消失了。
UINT ThreadDetectScriptErrorWnd(LPVOID lpParam)
{
while (1)
{
::Sleep(50);

HWND hWnd = ::FindWindow(NULL, _T("安全警报"));
if (hWnd)
{
::ShowWindow(hWnd, SW_HIDE);
HWND hBtnYes = ::FindWindowEx(hWnd, NULL, NULL, _T("是(&Y)"));
if (hBtnYes)
{
WORD nID = (WORD)::GetDlgCtrlID(hBtnYes);
::SendMessage(hWnd, WM_COMMAND, MAKELONG(nID, BN_CLICKED), (LPARAM)hBtnYes);
}
}
}
return 0;
}

但这种方法有个问题,因为是每隔50毫秒检查一次,所以窗口出现时会闪一下,虽然能很快消失,但使用者会看到闪一下。
请问各位高手,用什么办法能使窗口不被使用者看到?
...全文
68 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
MoXiaoRab 2009-08-27
  • 打赏
  • 举报
回复
这是我以前写的一个DLL,下CBT钩子的,在钩子函数中,wParam参数就是创建的窗口的句柄,你可以自己去修改下。系统创建窗口的时候都会被钩子先获取到

MoXiaoRab 2009-08-27
  • 打赏
  • 举报
回复
我教你一招狠的,保证窗口不会出来,下WH_CBT 窗口钩子,样例钩子函数如下,不难的

而且还不比你的定时器占用内存资源呢,平时不耗资源,只有当感兴趣的东西过来,才触发


/*
code by:Tr0j4n
Blog:http://hi.baidu.com/tr0j4n
*/

#include <windows.h>
#pragma data_seg("Shared")
HHOOK hHook=NULL;
#pragma data_seg()
#pragma comment(linker, "/section:Shared,rws")

HINSTANCE insSelf = NULL;
UINT_PTR iTimerID ;

LRESULT CALLBACK CBTProc( int nCode,
WPARAM wParam,
LPARAM lParam
)
{
if(nCode<0)
return CallNextHookEx(hHook,nCode,wParam,lParam);
if(nCode== HCBT_ACTIVATE)
{
HWND hWnd=(HWND)wParam;
LPTSTR lpName="",lpTarget="瑞星智能主动防御";
GetWindowText(hWnd,lpName,50);
if(strcmp(lpName,lpTarget)==0)
{
HWND hRadio,hCheck,hButton;
hRadio=::FindWindowEx(hWnd,NULL,"Button",
"#*H14;C0;S100;*#信任 #*H12;C6579300;S000;*# 信任该程序并将其添加到\"自定义白名单\"中");
hButton=::FindWindowEx(hWnd,NULL,"Button","确 定");
hCheck=::FindWindowEx(hWnd,NULL,"Button",
"重启前使用相同的处理方式,不再提示。");
::SendMessage(hRadio,BM_SETCHECK,1,0);
::SendMessage(hCheck,BM_SETCHECK,1,0);
::SendMessage(hButton,BM_CLICK,0,0);
}
//::SendMessage(hButton,WM_LBUTTONDOWN,0,0);
//::SendMessage(hButton,WM_LBUTTONUP,0,0);
}
return CallNextHookEx(hHook,nCode,wParam,lParam);
}

extern "C" __declspec(dllexport) VOID Joke()
{
MessageBox(NULL,"FUCK","Joke",MB_OK);
}

extern "C" __declspec(dllexport) VOID HookStart()
{
hHook=SetWindowsHookEx(WH_CBT,CBTProc,insSelf,NULL);

}
extern "C" __declspec(dllexport) VOID HookEnd()
{
if(hHook!=NULL)
{
UnhookWindowsHookEx(hHook);
hHook=NULL;
}

}


BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
insSelf=(HINSTANCE)hModule;
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
HookEnd();
break;
}
return TRUE;
}




ziplj 2009-08-27
  • 打赏
  • 举报
回复
SetSilent试了没有???
zzw_happy 2009-08-27
  • 打赏
  • 举报
回复
最好先需要的倒入证书
mickey139 2009-06-26
  • 打赏
  • 举报
回复
在启动CHtmlView时可以自己根据需要配置安全属性,这样就可以避免弹出类似的安全警告
DavidHsing 2009-06-26
  • 打赏
  • 举报
回复
lz 你这用查找标题的办法,那要是换了英文操作系统怎么办?

以前看到过解决这个问题的文章,但是想不起来在哪里看到的了...

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧