介绍一个功能强大的API函数 ShellExecute

问题的提出:

我使用MFC编写一个APP,要求About对话框中显示LOGO、公司名、地址和公司的URL链接。使用户点击URL链接以后,启动浏览器访问Web页面,这种对话框中的热链接使应用程序增色不少。我琢磨的方法是 从系统注册表中通过查找.htm 或 .html文件的关联程序来获得缺省浏览器的名字,这样好象有很多工作要做。此外,如果浏览器已经打开,总是开始一个新的实例替代当前已有的一个实例。想找一个容易一 点的方法,但我查过有关的资料,没有收获,请高手指教。

解决方法:

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

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

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的站点地址。例如:

ShellExecute(NULL, "open", "http://www.microsoft.com",
NULL, NULL, SW_SHOWNORMAL);

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

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

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

时间: 2024-11-05 06:03:34

介绍一个功能强大的API函数 ShellExecute的相关文章

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

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

rxvt一个功能强大的终端配置示例

rxvt 是一个http://www.aliyun.com/zixun/aggregation/17547.html">功能强大的的终端,它占用资源少,启动速度快,很多人都喜欢使用它.所以我在这里介绍一下Debian系统中rxvt中文终端的安装.在 Debian中有很多个rxvt包,可用apt-cache search rxvt命令查询.主要有以下三类,一个就叫rxvt,不支持中文显示:一个叫rxvt-ml,支持GB和BIG5中文编码:还有一个叫rxvt- unicode,支持unicod

LFTP : 一个功能强大的命令行FTP程序

LFTP : 一个功能强大的命令行FTP程序 大家好,这篇文章是介绍Lftp以及如何在Linux操作系统下安装的.Lftp是一个基于命令行的文件传输软件(也被称为FTP客户端),由Alexander Lukyanov开发并以GNU GPL协议许可发行.除了FTP协议外,它还支持FTPS,HTTP,HTTPS,HFTP,FISH,以及SFTP等协议.这个程序还支持FXP,允许数据绕过客户端直接在两个FTP服务器之间传输. 它有很多很棒的高级功能,比如递归镜像整个目录树以及断点续传下载.传输任务可以

Ledger-复式记账的一个功能强大的命令行工具

无论你是一个电脑极客还是普通用户,记录账户开销总是必不可少的.虽然在Linux上有很多基于GUI的记账工具(比如 - GNUCash)受到大家欢迎,但是工作在命令行的记账工具是很多用户难以想象的.在本文中,我们将讨论一个功能强大的命令行记账工具-Ledger.   ledger-main Ledger - 复式记账工具 Ledger是复式记账的一个功能强大的命令行工具.对于那些不了解"复式(Double-Entry)"的用户,它这意味着每笔交易都必须有一个源.站在一个外行的角度来看,这

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

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

利用php+mysql来做一个功能强大的在线计算器_php实例

找了很久,发现网上资料很少,于是想自己动手写,慢慢的发现问题多了,自己不怎么通算法,写一个计算式子短点还好,长了就挂了,再长点恐怕就要死机. 有一天做做mysql突然发现原来mysql功能这么强大,可以直接计算字符串...哈哈 这下可就高兴了. 代码还超级简单 就做了一个ajax的计算器 有式子错误提示 还可以时时显示输入的式子 有兴趣的朋友可以看看 更多的功能可以自己去开发 演示地址:http://www.jianlila.com/jsq.php jquer.js自己去下载 jsq1.php

多玩魔盒功能介绍之功能强大的多玩移动

多玩网讯 魔兽世界的界面中,有很多元素,例如角色头像.目标头像,小队头像.聊天框.动作条(就是快捷键栏).系统按钮框.背包框.耐久面板.BUFF面板.小地图位置.姿态条.宠物条.施法条.经验条.焦点头像等等. 多玩魔盒下载页面 能不能将这些元素都移动,随心所欲地DIY自己的界面呢? 魔盒通过多玩移动这个插件来实现这个功能. 几乎你想移动的元素,都可以通过这个插件来实现. 操作方法也很简单,在魔盒设置界面中选常规标签,在第一页的右下角,选择"多玩移动",如图. 然后选择开始变形按钮,进入

用API函数实现串行通讯

以往的DOS系统是通过DOS中断和BIOS中断向用户提供串行接口的通讯能力.在Windows环境下,C++的开发工具既没有提供象DOS和BIOS中那样专门的串行通讯控制方法,也不允许用户直接控制串口的中断. 为了保证资源共享,Windows系统完全接管了各种硬件资源,使用中断来控制端口将破坏系统的多任务性,使系统的稳定性受到影响.但Windows同时也提供了功能强大的API函数使用户能间接的控制串行通讯. 1.实现串行通讯的相关API函数 API函数不仅提供了打开和读写通讯端口的操作方法,还提供

功能强大的php分页函数_php技巧

分页是每一个程序需要去理解的东西,学习过的几门语言中我发现分页原理都是一样的,下面为php初学者分析一下php分页实现与最后面补充了一个超级强大的分页函数. 文章内容分页主要有两个办法: 办法一.按字数控制进行分页 按字数分页办法简单易用,但效果不好. 大致思想:首先.设定每页能容纳的最大字数,然后.计算文章内容的总字数,再由总字数和单页最大字数计算出出总页数,这样整个分页的准备工作就已经做好了. 具体到每一页的显示内容可以通过内容截取来实现,比如:页容纳500字,文章内容有2200字,那么当页