小妞会装机 -- 一个装机软件的开发笔记(五)
本文配套程序下载地址为: http://pan.baidu.com/share/link?shareid=358034&uk=3995556177
因为界面元素很少,所以界面开发很简单。现在讲业务逻辑。
整个逻辑分为下载逻辑和安装逻辑,还有UI逻辑。下载逻辑很麻烦。为什么呢?因为我没有自己的服务器。幸好有百度网盘,可以有共享外链。所以我要先将镜像文件放到百度网盘上,然后分享。在软件里面嵌入一个webbrowser,下载的时候先打开那个百度共享地址,然后在这个页面点击下载链接(直接下载这个地址会失败),最后获取一个下载地址,这个地址才是真正的下载地址。麻烦啊。如果有一个服务器可以直接下载文件多好啊。
问题来了,mfc里有webbrowser控件,但我使用的256版duilib没有。不过在网上找到一个,改来改去,好不容易可用了。又碰到了弹出javascript错误框的问题。前天才知道,原来duilib一直在更新,现在已经有webbrowser控件了。吐血啊... 既然duilib已经有这个控件了,我就不说了,直接贴解决如何消除javascript错误框和获取下载地址的代码
STDMETHODIMP CWebBrowserBase::Exec( const GUID* pguidCmdGroup, DWORD nCmdID,
DWORD nCmdexecopt, VARIANTARG* pvaIn, VARIANTARG* pvaOut )
{
HRESULT hr = S_OK;
if (pguidCmdGroup && IsEqualGUID(*pguidCmdGroup, CGID_DocHostCommandHandler))
{
switch (nCmdID)
{
case OLECMDID_SHOWSCRIPTERROR:
{
IHTMLDocument2* pDoc = NULL;
IHTMLWindow2* pWindow = NULL;
IHTMLEventObj* pEventObj = NULL;
BSTR rgwszNames[5] =
{
SysAllocString(L"errorLine"),
SysAllocString(L"errorCharacter"),
SysAllocString(L"errorCode"),
SysAllocString(L"errorMessage"),
SysAllocString(L"errorUrl")
};
DISPID rgDispIDs[5];
VARIANT rgvaEventInfo[5];
DISPPARAMS params;
BOOL fContinueRunningScripts = true;
int i;
params.cArgs = 0;
params.cNamedArgs = 0;
// Get the document that is currently being viewed.
hr = pvaIn->punkVal->QueryInterface(IID_IHTMLDocument2, (void **) &pDoc);
// Get document.parentWindow.
hr = pDoc->get_parentWindow(&pWindow);
pDoc->Release();
// Get the window.event object.
hr = pWindow->get_event(&pEventObj);
// Get the error info from the window.event object.
for (i = 0; i < 5; i++)
{
// Get the property's dispID.
hr = pEventObj->GetIDsOfNames(IID_NULL, &rgwszNames[i], 1,
LOCALE_SYSTEM_DEFAULT, &rgDispIDs[i]);
// Get the value of the property.
hr = pEventObj->Invoke(rgDispIDs[i], IID_NULL,
LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, ¶ms, &rgvaEventInfo[i],
NULL, NULL);
SysFreeString(rgwszNames[i]);
}
// At this point, you would normally alert the user with
// the information about the error, which is now contained
// in rgvaEventInfo[]. Or, you could just exit silently.
(*pvaOut).vt = VT_BOOL;
if (fContinueRunningScripts)
{
// Continue running scripts on the page.
(*pvaOut).boolVal = VARIANT_TRUE;
}
else
{
// Stop running scripts on the page.
(*pvaOut).boolVal = VARIANT_FALSE;
}
hr = S_OK;
break;
}
default:
hr = OLECMDERR_E_NOTSUPPORTED;
break;
}
}
else
{
hr = OLECMDERR_E_UNKNOWNGROUP;
}
return (hr);
}
HRESULT STDMETHODCALLTYPE CWebBrowserBase::Download(IMoniker *pmk,
IBindCtx *pbc,
DWORD dwBindVerb,
LONG grfBINDF,
BINDINFO *pBindInfo,
LPCOLESTR pszHeaders,
LPCOLESTR pszRedir,
UINT uiCP)
{
HRESULT hr = S_FALSE;
LPOLESTR sURL = NULL;
if(pmk)
hr = pmk->GetDisplayName(pbc, NULL, &sURL);
static CString s_url;
CString tmp = sURL;
if (s_url != tmp)
{
g_status = EAZ_DOWNLOAD;
s_url = tmp;
}
//When working with sURL, use CComBSTR strUrl(sURL)
//Otherwise, you may end up with a huge mem leak?
//Free string as stated in MSDN
//Get IMalloc interface
IMalloc *pMalloc;
if(CoGetMalloc((DWORD)1, &pMalloc) == S_OK)
{
pMalloc->Free((LPVOID)sURL);
}
else
CoTaskMemFree((LPVOID)sURL);
return S_OK;
}
小妞会装机 -- 一个装机软件的开发笔记(五)相关推荐
- 树莓派开发笔记(五):GPIO引脚介绍和GPIO的输入输出使用(驱动LED灯、检测按键)
若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...
- JNI开发笔记(五)--JNI语法总结
JNI语法总结 引 前言 1. 传参类型为变量/变量指针 1.1 变量 1.2 变量指针 2. 传参类型为数组指针 3. 传参类型为结构体指针 引 JNI开发笔记(一)–Android Studio安 ...
- 小妞会装机 -- 一个装机软件的开发笔记( 三)
本文配套程序下载地址为: http://pan.baidu.com/share/link?shareid=358034&uk=3995556177 界面基本山确定下来,感觉操作起来的确很简单, ...
- 小妞会装机 -- 一个装机软件的开发笔记 (一)
本文配套程序下载地址为: http://pan.baidu.com/share/link?shareid=358034&uk=3995556177 见很多人不会装系统,拿了ghost盘也还是不 ...
- 小妞会装机 -- 一个装机软件的开发笔记 (二)
本文配套程序下载地址为: http://pan.baidu.com/share/link?shareid=358034&uk=3995556177 要做一个操作非常简单的装机软件.简单到什么程 ...
- 小妞会装机 -- 一个装机软件的开发笔记(七)
本文配套程序下载地址为: http://pan.baidu.com/share/link?shareid=358034&uk=3995556177 用libcurl解决了下载的问题,用duil ...
- 小妞会装机 -- 一个装机软件的开发笔记(八)
做好了这个软件后,我很高兴,因为我以前没有用过dui,而通过做这个软件学习并使用了dui技术,尽管这个软件只有一些非常简单的界面元素.dui让我以后的软件开发多了一个选择.通过这个软件的实践,我觉得不 ...
- 小妞会装机 -- 一个装机软件的开发笔记( 四)
本文配套程序下载地址为: http://pan.baidu.com/share/link?shareid=358034&uk=3995556177 界面的xml配好后,就开始写实现代码.先上代 ...
- 小妞会装机 -- 一个装机软件的开发笔记(六)
本文配套程序下载地址为: http://pan.baidu.com/share/link?shareid=358034&uk=3995556177 下载地址获得了,那就下载吧.最简单的,URL ...
最新文章
- perfect book
- python3环境下“No module named nibabel”的解决办法
- python中forward函数的引用_调用没有.forward()的forward函数
- 的注册表怎么才能删干净_白蚁怎么才能消灭干净?
- Nginx概述与安装
- 【译】A look at MobileIron’s zero sign-on and passwordless authentication plans
- docker中创建Jmeter及在外部使用JMeter-Server控制
- 【文末有赠书】从历史角度讲现代数学
- 用Python手写五大经典排序算法,看完这篇终于懂了!
- Linux常用命令及笔记
- vue 指令 v-model
- Redis在windows下安装说明
- hdu 2184 01背包变形
- 云开发初探 —— 更简便的小程序开发模式
- 网络工程师Day3--PPPoE配置实验
- 计算机专业Java必读书单,高清PDF电子版下载
- C语言函数 bzero
- matlab开关电源仿真软件,开关电源仿真设计软件选择
- loadrunner-md5签名加密并转大写
- MapWinGIS4.9.3的二次开发
热门文章
- 每天都在反省自己,但是每天却都浑浑噩噩
- 商城项目实战31:solar服务器搭建、搜索功能实现
- 软件测试基础【一篇足矣】
- window11中QQ登录“无法访问个人文件夹”解决方案
- m1虚拟机运行Linux,虚拟机Parallels发布新技术预览版,M1 Mac能运行Win 10了
- 文华财经期货多空趋势指标公式,期货幅图高抛低吸逃顶抄底精准买卖点信号系统
- 可行性研究报告——学生成绩查询系统
- UML学生成绩管理系统
- ANSYS使用APDL数组存储每一个荷载子步下的后处理参数值
- 怎么用python编程分段函数值域_如何在Python中用多变量定义分段函数