windows客户端开发--根据可下载url另存为文件(微信windows客户端这样做的)

可以我的blog的标题会让你误解,那么好,没图说了xx:

比如微信windows客户端发送了一张图片,我们可以预览这张图片,还可以保存到本地:

那么windows程序是如何下载这张图片的呢?

是这样,别人给你发了一张图片,这张图片的原图会存在微信的服务器上,这样这个文件就对应了一个可下载的url。

如果你拿到了这个url,用浏览器访问,你就可以通过下载这个原图了。

但是,在浏览器下载是我们客户端控制不了的,下载路径也要在浏览器中设置,也不能方便的重命名。

那么这时候问题来了:

我们怎么样从一个url另存为这个文件呢?

首先我们要弄出上面的另存为对话框吧,把文件要保存的位置,以及文件名都设置好了,点击确定后再开始下载。

另存为对话框就不细说了,直接上代码了:

    OPENFILENAME opfn;
    WCHAR file_name[MAX_PATH] ;
    //wstring转WCHAR数组
    swprintf(file_name, image_name_.size() + 1, L"%ls", image_name_.c_str());
    ZeroMemory(&opfn, sizeof(OPENFILENAME));
    opfn.lStructSize = sizeof(OPENFILENAME);

    //根据文件名取出后缀名
    std::wstring file_extension_name = image_name_;
    size_t i = file_extension_name.rfind(‘.‘, file_extension_name.length());
    if (i != string::npos) {
        file_extension_name = file_extension_name.substr(i + 1, file_extension_name.length() - i);
    }

    //设置另存为文件的默认后缀名
    std::wstring default_ext = file_extension_name;
    opfn.lpstrDefExt = default_ext.c_str();

    //设置筛选类型
    file_extension_name = L"图片文件(*." + file_extension_name + L")";
    opfn.lpstrFilter = file_extension_name.c_str();
    opfn.nFilterIndex = 0;
    opfn.lpstrFile = file_name;

    opfn.nMaxFile = MAX_PATH;
    opfn.hwndOwner = m_hWnd;
    opfn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST ;
    if (GetSaveFileName(&opfn))
    {
        //开始下载文件
    }

上面的另存为工作完成了,下面就差如何下载了:

查查windows API,结果出现了:

URLDownloadToFile

作用:

Downloads bits from the Internet and saves them to a file.

原型:

HRESULT URLDownloadToFile(
             LPUNKNOWN            pCaller,
             LPCTSTR              szURL,
             LPCTSTR              szFileName,
  _Reserved_ DWORD                dwReserved,
             LPBINDSTATUSCALLBACK lpfnCB
);

参数就不过多介绍了,自己msdn吧!

最主要看下头文件和库:

Header                        Urlmon.h
Library                        Urlmon.lib
DLL                             Urlmon.dll

补齐上面的代码:

if (GetSaveFileName(&opfn))
    {
        URLDownloadToFile(NULL, url, file_name, NULL, NULL);
    }

大功告成了~~等等,还有瑕疵:

再看看微信,如果另存为的名称已经存在,会有提示,而我们的程序没有:

这里还需要设置一下OPENFILENAME 的Flags,其中有一个叫:

OFN_OVERWRITEPROMPT

opfn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST |OFN_OVERWRITEPROMPT;
时间: 2024-08-24 23:47:25

windows客户端开发--根据可下载url另存为文件(微信windows客户端这样做的)的相关文章

windows客户端开发--使用tinyxml库解析xml文件

例如,微信windows客户端使用的duilib库中,界面就是用xml进行描述的. 所以,今天我们就来谈一谈windows客户端中,也就是C++中如何解析xml. 很多时候,我们都使用.ini文件来存储一些数据. xml确实是有很多的优点,某种程度上来说也确实可以完全取代ini,但也并非如有些人鼓吹的处处都比ini强. xml,对于描述复杂的数据结构非常的方便,缺点相对ini使用麻烦一点.在表达较短的配置时,没有ini简练.而且因为它有比较严格的格式审查机制,容错性也不是特别好,在手写时容易出现

Windows客户端开发简介(一)

在这样一个移动当道的年代,我跟大家讨论Windows客户端开发,似乎有些倚老卖老的意思了.然而我却觉得无论什么时候,Windows客户端开发其实还是有着不少实用经典的技术的.对了,确切说我是要说说Windows C++客户端开发,什么WinForm,WPF,并不在讨论范围之内,我承认用.NET ,C#做Windows客户端对开发人员来说确实是件轻松愉快的事,但是因为这些技术由于种种原因(主要还是效率问题)在经典的Windows客户端程序采用的少之又少,所以我打算把他们略过. 我并不是什么微软技术

Windows Phone开发人员必看资料

win phone开发必看资料,下载地址收藏啦!收藏后可有选择性的下载,希望大家喜欢! 完整附件下载:http://down.51cto.com/data/414417 附件预览: Windows Embedded Standard开发初体验[课件汇总] http://down.51cto.com/data/65627 利用Windows Embedded Standard 7构建操作系统映像 http://down.51cto.com/data/65761 Windows Embedded S

上门洗车APP --- Android客户端开发 之 网络框架封装(二)

上门洗车APP --- Android客户端开发 之 网络框架封装(二) 前几篇博文中给大家介绍了一下APP中的基本业务及开发本项目使用的网络架构: 上门洗车APP --- Android客户端开发 前言及业务简介 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 本篇接着给大家分享网络框架封装,相信感兴趣的朋友已经对上篇博文中的一些开源项目有了些许了解,这里继续为大家介绍关于GenericDataManager 通用网络管理类中的 dataRequest 方法 和

上门洗车APP --- Android客户端开发 之 项目结构介绍

上门洗车APP --- Android客户端开发 之 项目结构介绍 前言 虽然公司项目较紧,但还是抽出时间给大家继续更新.     o_O"~ 感谢大家的关注,很高兴和大家共同学习.前面给大家分享了项目中的以下内容: 上门洗车APP --- Android客户端开发 前言及业务简介 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(二) 之前有很多朋友私信过来说想打包一份源码学习,由于本项目也是还

iOS客户端开发与Web前端开发

转载自:http://blog.cnbang.net/tech/1813/不知不觉做iOS客户端开发已经半年多了,了解到iOS客户端开发与Web前端开发的一些异同,写一下. 版本升级.用户角度上看,客户端升级必须让用户手动下载整个新的安装包覆盖安装,而web的升级无需用户做任何事情.开发角度上看,如果客户端有个小bug需要紧急修复,需要修复完后打包一个完成的安装包,给一个版本号,发布给用户升级.而web只需要修改后台的某些文件,然后传到自己的服务器,用多快速的迭代开发方式都没问题.web没有版本

Windows 2008 想自动下载, default.ica 文件

Windows 2008  想自动下载, default.ica 文件,Windows 2008 ,IE8 默认不允许下载将Internet,下载启用即可,如图:

windows客户端开发调试工具

本文介绍windows常用开发与调试工具. 1.windows常用开发与调试工具 1.1 Sysinternals 内核大神打造,含大量windows系统工具,windows开发必备神器,大神被MS招安. 下载地址:http://technet.microsoft.com/en-us/sysinternals Procmon.exe 监视程序运行过程中的动作,可用于性能监控. procexp.exe 相当于升级版的任务管理器,可以查看加载模块,模块查找,线程列表(含CPU百分比), 创建dump

windows客户端开发--也许是一条不归路

如今的Windows客户端开发,已经被同行嘲笑为鸡肋,甚至有些人认识做Windows客户端就是一个笑柄. 食之无味,弃之可惜. 不可否认,PC端没落的很快. 但是想说的是,任何一门技术都有存在的道理. 微软就是所有Windows客户端开发人员的大腿,虽然这个大腿让人捉摸不定,主方向总是变化. 换言之,Windows客户端开发难度不小.如果你能轻松的驾驭指针.内存.类等等,即使有一个Windows客户端彻底完蛋了,你也许只用一个星期或是一个月就掌握了另一种编程语言开发. 重要的是思想~ 我个人认为