⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialogkiller.h

📁 一个使用wtl写的完整的多窗口浏览器
💻 H
字号:

#pragma once

// for debug
#ifdef _DEBUG
	const bool _Mtl_DialogKiller_traceOn = false;
	#define dgkTRACE if (_Mtl_DialogKiller_traceOn) ATLTRACE
#else
	#define dgkTRACE
#endif
/*
// I never trust IE's interfaces.
class CDialogKiller
{
public:
	static HHOOK s_hCreateHook;
	static bool s_bValid;

	static bool IsInstalled()
	{
		return (s_hCreateHook != NULL);
	}

	static void Validate(bool bValid = true)
	{
		s_bValid = bValid;
	}

	static void InstallDialogKiller()
	{
		if (s_hCreateHook == NULL) {
			s_hCreateHook = ::SetWindowsHookEx(WH_CBT, CreateHookProc, _Module.GetModuleInstance(), GetCurrentThreadId());
			ATLASSERT(s_hCreateHook != NULL);
		}
	}

	static void UninstallDialogKiller()
	{
		if (s_hCreateHook != NULL)
			::UnhookWindowsHookEx(s_hCreateHook);

		s_hCreateHook = NULL;
	}

	static void OnDialogCreate(HWND hWndDlg)
	{
		CString str = MtlGetWindowText(hWndDlg);
		dgkTRACE(_T("OnDialogCreate\n"));
		CWindow wndDlg(hWndDlg);

		wndDlg.ModifyStyle(WS_VISIBLE, 0, SWP_NOACTIVATE);
		wndDlg.PostMessage(WM_COMMAND, MAKEWPARAM(IDCANCEL, 0));
		wndDlg.PostMessage(WM_COMMAND, MAKEWPARAM(IDOK, 0));
	}

	static void OnTridentDlgFrameCreate(HWND hWndDlg)
	{	
		CWindow wndDlg(hWndDlg);
		dgkTRACE(_T("OnTridentDlgFrameCreate\n"));
		DWORD dwStyle = wndDlg.GetStyle();
		if (dwStyle & WS_POPUPWINDOW) {
			dgkTRACE(_T(" kill the IE trident dialog!\n"));
			wndDlg.ModifyStyle(WS_VISIBLE, 0, SWP_NOACTIVATE);
//			wndDlg.PostMessage(WM_KEYDOWN, VK_RETURN);
			wndDlg.PostMessage(WM_CLOSE);
		}

//		The window don't have text yet.
//		if (str.Find(_T("僗僋儕僾僩")) != -1 && str.Find(_T("僄儔乕")) != -1) {
//			dgkTRACE(_T(" kill the IE trident dialog!\n"));

//			wndDlg.ModifyStyle(WS_VISIBLE, 0, SWP_NOACTIVATE);
//			wndDlg.PostMessage(WM_KEYDOWN, VK_ESCAPE);
//			wndDlg.PostMessage(WM_CLOSE);
//		}
	}

// Implementation - Hook procs
	static LRESULT CALLBACK CreateHookProc(int nCode, WPARAM wParam, LPARAM lParam)
	{
		LRESULT lRet = 0;

		if (nCode == HCBT_CREATEWND)
		{
			if (!s_bValid)
				return lRet;

			HWND hWndDlg = (HWND)wParam;

			TCHAR szClassName[40];
			::GetClassName(hWndDlg, szClassName, 40);
			dgkTRACE(_T("DialogKiller - HCBT_CREATEWND (%s)\n"), szClassName);

			if(!lstrcmp(_T("#32770"), szClassName))
				OnDialogCreate(hWndDlg);
			else if (!lstrcmp(_T("Internet Explorer_TridentDlgFrame"), szClassName))
				OnTridentDlgFrameCreate(hWndDlg);
		}
		else if(nCode < 0)
		{
			lRet = ::CallNextHookEx(s_hCreateHook, nCode, wParam, lParam);
		}

		return lRet;
	}
};

class CDialogKillerLock
{
public:
	bool m_bInstallReally;

	CDialogKillerLock()
	{
		CDialogKiller::Validate(false);
	}

	~CDialogKillerLock()
	{
		CDialogKiller::Validate(true);
	}
};
*/

class CDialogKiller2
{
public:
	static void KillDialog()
	{
		dgkTRACE(_T("KillDialog\n"));

		// I guess this is not so slow.
		MtlForEachTopLevelWindow(_T("#32770"), NULL, _Function_DialogFilter());
		MtlForEachTopLevelWindow(_T("Internet Explorer_TridentDlgFrame"), NULL, _Function_TridentFrameDlgFilter());
	}

	struct _Function_DialogFilter
	{
		bool operator()(HWND hWnd)
		{
			if (MtlIsWindowCurrentProcess(hWnd)) {
				CString strCaption = MtlGetWindowText(hWnd);
				if (_Filter_ActiveXWarningDialog(hWnd, strCaption))
					return true;

				_Filter_OfflineDialog(hWnd, strCaption);
			}

			return true;
		}
	};

	struct _Function_TridentFrameDlgFilter
	{
		bool operator()(HWND hWnd)
		{
			if (MtlIsWindowCurrentProcess(hWnd)) {
				CString strCaption = MtlGetWindowText(hWnd);
				_Filter_ScriptErrorTridentDlgFrame(hWnd, strCaption);
			}

			return true;
		}
	};

	static bool _Filter_ScriptErrorTridentDlgFrame(CWindow wnd, const CString& strCaption)
	{
		if (strCaption.Find(_T("僗僋儕僾僩")) != -1 && strCaption.Find(_T("僄儔乕")) != -1)	{
//			wnd.ModifyStyle(WS_VISIBLE, 0, SWP_NOACTIVATE);
			wnd.SendMessage(WM_CLOSE);
//			wnd.SendMessage(WM_KEYDOWN, VK_ESCAPE);
			return true;
		}

		return false;
	}

	static bool _Filter_OfflineDialog(CWindow wnd, const CString& strCaption)
	{
		if (strCaption.Find(_T("Offline")) != -1) {
			wnd.SendMessage(WM_COMMAND, MAKEWPARAM(IDCANCEL, 0));
			wnd.SendMessage(WM_COMMAND, MAKEWPARAM(IDOK, 0));
//			wnd.SendMessage(WM_KEYDOWN, VK_ESCAPE);
			return true;
		}

		return false;
	}

	static bool _Filter_ActiveXWarningDialog(CWindow wnd, const CString& strCaption)
	{
		if (strCaption != _T("Microsoft Internet Explorer"))
			return false;

		CWindow wndInner = wnd.GetDlgItem(0x0000FFFF);
		if (wndInner.m_hWnd == NULL)
			return false;

		CString strOneStaticText = MtlGetWindowText(wndInner.m_hWnd);
		if (strOneStaticText.Find(_T("ActiveX")) != -1 && strOneStaticText.Find(_T("埨慡")) != -1) {
			wnd.SendMessage(WM_COMMAND, MAKEWPARAM(IDCANCEL, 0));
			wnd.SendMessage(WM_COMMAND, MAKEWPARAM(IDOK, 0));
//			wnd.SendMessage(WM_KEYDOWN, VK_ESCAPE);
			return true;
		}
		else if (strOneStaticText.Find(_T("奐偗傑偣傫")) != -1) {
			wnd.SendMessage(WM_COMMAND, MAKEWPARAM(IDCANCEL, 0));
			wnd.SendMessage(WM_COMMAND, MAKEWPARAM(IDOK, 0));
//			wnd.SendMessage(WM_KEYDOWN, VK_ESCAPE);
			return true;
		}

		return false;
	}
};

//__declspec(selectany) HHOOK CDialogKiller::s_hCreateHook = NULL;
//__declspec(selectany) bool CDialogKiller::s_bValid = true;


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -