扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:李汉鹏 来源:VCKBASE 2007年10月19日
关键字:
// 窗口标题"Microsoft Internet Explorer"的资源标识 #define IDS_MESSAGE_BOX_TITLE 2213 HRESULT CLhpHtmlView::OnShowMessage(HWND hwnd, LPOLESTR lpstrText, LPOLESTR lpstrCaption, DWORD dwType, LPOLESTR lpstrHelpFile, DWORD dwHelpContext, LRESULT * plResult) { //载入Shdoclc.dll 和IE消息框标题字符串 HINSTANCE hinstSHDOCLC = LoadLibrary(TEXT("SHDOCLC.DLL")); if (hinstSHDOCLC == NULL) return S_FALSE; CString strBuf,strCaption(lpstrCaption); strBuf.LoadString(hinstSHDOCLC, IDS_MESSAGE_BOX_TITLE); // 比较IE消息框标题字符串和lpstrCaption // 如果相同,用自定义标题替换 if(strBuf==lpstrCaption) strCaption = m_DefaultMsgBoxTitle; // 创建自己的消息框并且显示 *plResult = MessageBox(CString(lpstrText), strCaption, dwType); //卸载Shdoclc.dll并且返回 FreeLibrary(hinstSHDOCLC); return S_OK; }从代码中可以看到通过设定m_DefaultMsgBoxTitle的值来改变消息宽的标题,修改此值是同过SetDefaultMsgBoxTitle来实现
void CLhpHtmlView::SetDefaultMsgBoxTitle(CString strTitle) { m_DefaultMsgBoxTitle=strTitle; }怎样定制、修改浏览器向Web服务器发送的HTTP请求头
GET /text7.htm HTTP/1.0 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, \ application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Referer: http://localhost Accept-Language: en-us User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Poco 0.31; LHP Browser 1.01; \ .NET CLR 1.1.4322) Host: localhost Connection: Keep-Alive CHtmlView的 void Navigate2( LPCTSTR lpszURL, DWORD dwFlags = 0, LPCTSTR lpszTargetFrameName = NULL, LPCTSTR lpszHeaders = NULL, LPVOID lpvPostData = NULL, DWORD dwPostDataLen = 0 );函数参数lpszHeaders可以指定HTTP请求头,示例如下:
Navigate2(_T("http://localhost"),NULL,NULL, "MyDefineField: TestValue");我们捕获的HTTP头如下:
#define WM_NVTO (WM_USER+1000) class NvToParam { public: CString URL; DWORD Flags; CString TargetFrameName; CByteArray PostedData; CString Headers; }; void CDemoView::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags, LPCTSTR lpszTargetFrameName, CByteArray& baPostedData, LPCTSTR lpszHeaders, BOOL* pbCancel) { CString strHeaders(lpszHeaders); if(strHeaders.Find("User-Agent:LHPBrowser 1.0") < 0)// 检查头里有没有自定义的User-Agent串 { *pbCancel = TRUE;// 没有,取消这次导航 if(!strHeaders.IsEmpty()) strHeaders += "\r\n"; strHeaders += "User-Agent:LHPBrowser 1.0";// 加上自定义的User-Agent串 NvToParam* pNvTo = new NvToParam; pNvTo->URL = lpszURL; pNvTo->Flags = nFlags; pNvTo->TargetFrameName = lpszTargetFrameName; baPostedData.Copy(pNvTo->PostedData); pNvTo->Headers = strHeaders; // 发送一个自定义的导航消息,并把参数发过去 PostMessage(WM_NVTO,(WPARAM)pNvTo); return; } CHtmlView::OnBeforeNavigate2(lpszURL, nFlags, lpszTargetFrameName, baPostedData, lpszHeaders, pbCancel); } LRESULT CDemoView::OnNvTo(WPARAM wParam, LPARAM lParam) { NvToParam* pNvTo = (NvToParam*)wParam; Navigate2((LPCTSTR)pNvTo->URL, pNvTo->Flags, pNvTo->PostedData, (LPCTSTR)pNvTo->TargetFrameName, (LPCTSTR)pNvTo->Headers); delete pNvTo; return 1; }在OnBeforeNavigate2中如果发现没有自定义的User-Agent串,就加上这个串,并取消本次导航,再Post一个消息(一定要POST,让OnBeforeNavigate2跳出以后再进行导航 ),在消息中再次导航,再次导航时请求头已经有了自己的标识,所以能正常的导航。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者