一个功能强大的API函数 ShellExecute 转发自VC知识库

问题的提出:

我使用MFC编写一个APP,要求About对话框中显示LOGO、公司名、地址和公司的URL链接。使用户点击URL链接以后,启动浏览器访问Web页面,这种对话框中的热链接使应用程序增色不少。我琢磨的方法是从系统注册表中通过查找.htm

.html文件的关联程序来获得缺省浏览器的名字,这样好象有很多工作要做。此外,如果浏览器已经打开,总是开始一个新的实例替代当前已有的一个实例。想找一个容易一点的方法,但我查过有关的资料,没有收获,请高手指教。

解决方法:

如果有这样的一个API函数该多好:OpenThisHereURLForMeNowPlease(),问题不就解决了!!我告诉你吧,有,
但它不是你所想象的那个函数。到目前为止,有关文档中还没有提到过这么一个有用的函数,它能打开桌面上的任何文件,也能打开Internet
URL。唯一我能找到的参考资料是在Microsoft? Access KnowledgeBase中很暧昧地提到过这个函数。

这个不可思议的函数就是:ShellExecute,取代了WinExec。你可以给它任何文件的名字,它都能识别出来并打开它。例如:

view
source

print?

1.ShellExecute(NULL,"open","iloveu.bmp",NULL,NULL,SW_SHOWNORMAL);

用缺省的位图编辑器打开一个叫iloveu.bmp的位图文件,这个缺省的位图编辑器可能是 Microsoft Paint, Adobe Photoshop,
或者 Corel PhotoPaint。

有关ShellExecute的详细用法自己去参考MSDN吧,重要的是你知道了这个函数能打开任何文件,甚至是桌面和URL快捷方式( .ink或
.url)。ShellExecute解析系统注册表HKEY_CLASSES_ROOT中所有的内容,判断启动那一个执行程序,并且启动一个新的实例或使用DDE将文件名连到一打开的实例。然后,ShellExecute
返回打开文件的应用的实例句柄。

更奇妙的是ShellExecute不仅能打开机器上的文件,还能打开Internet的站点地址。例如:

view
source

print?

1.ShellExecute(NULL, "open", "http://www.microsoft.com"

2.             NULL, NULL, SW_SHOWNORMAL);

这个代码使你能访问微软的主页。当ShellExecute遇到文件名前面的“http:”时,可以判断出要打开的文件是Web文件,随之启动Internet
Explorer 或者 Netscape Navigator
或者任何你使用的别的浏览器打开文件。ShellExecute还能识别其它协议,象FTP、GOPHER。甚至识别“mailto”,如果文件名指向“mailto:[email protected]”,它启动电子邮件程序并打开一个待编辑的新邮件。总之,ShellExecute函数就是如此简单地打开磁盘文件和Internet文件。如果将第二个参数“OPEN”改为“PRINT”或者“EXPLORE”,ShellExecute将能打印文件和打开文件夹。ShellExecute还有一个扩展函数ShellExecuteEx,所带参数中有一个特殊的结构,功能更强,它的用法参见有关文档">
或者任何你使用的别的浏览器打开文件。ShellExecute还能识别其它协议,象FTP、GOPHER。甚至识别“mailto:”,如果文件名指向“mailto:[email protected]”,它启动电子邮件程序并打开一个待编辑的新邮件">或者任何你使用的别的浏览器打开文件。ShellExecute还能识别其它协议,象FTP、GOPHER。甚至识别“mailto:”,如果文件名指
向“mailto:[email protected]”,它启动电子邮件程序并打开一个待编辑的新邮件。

总之,ShellExecute函数就是如此简单地打开磁盘文件和Internet文件。如果将第二个参数“OPEN”改为“PRINT”或者“EXPLORE”,ShellExecute将能打印文件和打开文件夹。ShellExecute还有一个扩展函数ShellExecuteEx,所带参数中有一个特殊的结构,功能更强,它的用法参见有关文档。

现在,你知道了ShellExecute的秘密,用它很容易增加一个链接到你的About对话框。不是吗。:)

时间: 2024-10-12 12:50:29

一个功能强大的API函数 ShellExecute 转发自VC知识库的相关文章

SAX,功能强大的 API

https://www.ibm.com/developerworks/cn/xml/x-saxapi/ SAX,功能强大的 API 在摘自 XML by Example 的本篇预览中比较了 DOM 和 SAX,然后开始使用 SAX 这篇对 Benoit Marchal 所著的 XML by Example第二版的预览给出了对 SAX 的翔实介绍,SAX 是用于处理 XML 的基于事件的 API,它已经成为事实上的标准.本篇预览讲述了何时使用 SAX 替换 DOM,概述了常用的 SAX 接口,并在

高效、易用、功能强大的 api 管理平台(内附彩蛋)

前言导读 实际环境的需求可以说是:只有你没想到,没有实现不了的,征对于目前实际开发.测试.生产等环境中,需要用到各类的接口可达几十.甚至上百个,因此,必须需要一个统一管理的工具平台来统一管理这类接口,从而方便后续使用.那么今天来简单介绍下开源的接口管理工具:YApi 平台介绍 官方网站:https://yapi.ymfe.org/index.htmlGithub地址:https://github.com/YMFE/yapi YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.

WebLech是一个功能强大的Web站点下载与镜像工具

WebLech是一个功能强大的Web站点下载与镜像工具.它支持按功能需求来下载web站点并能够尽可能模仿标准Web浏览器的行为.WebLech有一个功能控制台并采用多线程操作. http://sourceforge.net/projects/weblech/files/WebLech/weblech-0.0.3/weblech-0.0.3.tar.gz/download?use_mirror=nchc&download=

SuperSwipeRefreshLayout 一个功能强大的自定义下拉刷新组件

SuperSwipeRefreshLayout 一个功能强大的自定义下拉刷新组件. Why? 下拉刷新这种控件,想必大家用的太多了,比如使用很多的XListView等.最近,项目中很多列表都是使用ReyclerView实现的,代替了原有的ListView,原有下拉刷新方式遭到挑战.本来Google推出的SwipeRefreshLayout已经能够满足大部分的需求了.然而,由于其定制性较差,下拉刷新的样式无法修改,而且被嵌套的View也无法跟随手指的滑动而滑动.基于以上考虑,定制自己强大的Supe

XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建 XAMPP 软

XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建 XAMPP 软件站集成软件包.这个软件包原来的名字是 LAMPP,但是为了避免误解,最新的几个版本就改名为 XAMPP 了.它可以在Windows.Linux.Solaris.Mac OS X 等多种操作系统下安装使用,支持多语言:英文.简体中文.繁体中文.韩文.俄文.日文等. http://baike.baidu.com/view/864591.htm?fr=aladdin

SuperSwipeRefreshLayout 一个功能强大的自己定义下拉刷新组件

SuperSwipeRefreshLayout 一个功能强大的自己定义下拉刷新组件. Why? 下拉刷新这样的控件.想必大家用的太多了,比方使用非常多的XListView等. 近期.项目中非常多列表都是使用ReyclerView实现的.取代了原有的ListView,原有下拉刷新方式遭到挑战.本来Google推出的SwipeRefreshLayout已经能够满足大部分的需求了. 然而,因为其定制性较差.下拉刷新的样式无法改动.并且被嵌套的View也无法尾随手指的滑动而滑动.基于以上考虑,定制自己强

整合了一个功能强大完善的OA系统源码,php全开源 界面漂亮美观

整合了一个功能强大完善的OA系统源码,php全开源界面漂亮美观.需要的同学联系Q:930948049

Swifter.Json -- 在 .Net 平台上的一个功能强大,简单易用,稳定又不失高性能的 JSON 序列化和反序列化工具。

Swifter.Json Github Wiki 在 .Net 平台上的一个功能强大,简单易用,稳定又不失高性能的 JSON 序列化和反序列化工具. Swifter.Json 已经经过了大量测试和线上项目中运行许久来确保它的稳定性. 特性 1: 支持 .Net 上绝大多是的数据类型,且轻松扩展:包括但不限于:实体,字典,集合,迭代器,数据读取器和表格. 2: 支持 .Net 我已知的大多数平台,包括但不限于:.Net Framework 2.0+, .Net Core 2.0+, .Net St

Inxi:一个功能强大的获取Linux系统信息的命令行工具

Inxi 最初是为控制台和  IRC(网络中继聊天)开发的一个强大且优秀的命令行系统信息脚本.可以使用它获取用户的硬件和系统信息,它也用于调试或者社区技术支持工具. 使用 Inxi 可以很容易的获取所有的硬件信息:硬盘.声卡.显卡.网卡.CPU 和 RAM 等.同时也能够获取大量的操作系统信息,比如硬件驱动.Xorg  .桌面环境.内核.GCC 版本,进程,开机时间和内存等信息. 运行在命令行和 IRC 上的 Inxi 输出略有不同,IRC 上会有一些可供用户使用的默认过滤器和颜色选项.支持的