启动新的应用程序

转载 2006年05月28日 21:03:00

在for DOS的C语言中,有一个system()函数,其功能是执行命令行程序,在VB中也有shell()函数,在Windows程序设计中WinAPI也为我们提供了类似的函数,它们就是WinExec()和ShellExecute(),下面就来讨论一下这两个函数的用法。

1)WinExec()

函数原型: UINT WinExec(LPCSTR lpCmdLine,UINT uCmdShow);

参数说明:(激活的意思是能接受焦点,即标题栏变成蓝色)

lpCmdLine:以0结尾的字符串,命令行参数。

uCmdShow:新的应用程序的运行方式。其取值如下:

SW_HIDE 隐藏
SW_MAXIMIZE 最大化
SW_MINIMIZE 最小化,并把Z order顺序在此窗口之后(即窗口下一层)的窗口激活
SW_RESTORE 激活窗口并还原为初始化大小
SW_SHOW 以当前大小和状态激活窗口
SW_SHOWDEFAULT 以默认方式运行
SW_SHOWMAXIMIZED 激活窗口并最大化
SW_SHOWMINIMIZED 激活窗口并最小化
SW_SHOWMINNOACTIVE 最小化但不改变当前激活的窗口
SW_SHOWNA 以当前状态显示窗口但不改变当前激活的窗口
SW_SHOWNOACTIVATE 以初始化大小显示窗口但不改变当前激活的窗口
SW_SHOWNORMAL 激活并显示窗口,如果是最大(小)化,窗口将会还原。第一次运行程序 时应该使用这个值

比如说,我想要用记事本打开"C:/HDC.TXT",以正常方式运行:

WinExec("notepad c://hdc.txt",SW_SHOWNORMAL);

如果调用成功,这个函数会返回一个不小于31的值,否则调用失败,其返回值的意义如下:

0 系统内存或资源不足
ERROR_BAD_FORMAT .EXE文件格式无效(比如不是32位应用程序)
ERROR_FILE_NOT_FOUND 指定的文件设有找到
ERROR_PATH_NOT_FOUND 指定的路径没有找到

这个函数和system()非常类似,只能运行.EXE文件,这样在WINDOWS中有它不尽人意的地方,比如不能用此方法通过关联的方法打开文件,例如WinExec("1.html",SW_SHOWNA);就不能打开此文档。

2)ShellExecute()

函数原型:

HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd );

参数说明:

hwnd 窗口的句柄
lpOperation 进行的操作,如"open","print","explore"分别对应"打开","打印","游览", 也可以为空(""),此时表示进行默认的操作。 lpFile 要操作的文件。
lpParameters 如果lpFile指定的是一个可执行文件则表示参数
lpDirectory 操作进行的目录
nShowCmd 程序的运行方式,其取值见上例。

 

如果这个函数调用成功,将返回实例的句柄,如果不成功,返回值包含错误信息,由于类型比较多,这里就不一一列举了,详见WinApi的帮助。

这样,上面的例子就可以改变为(假设窗口的句柄为Handle)

ShellExecute(Handle,"open","notepad","c://hdc.txt","",SW_SHOWNORMAL);

其实不用那么复杂,因为.TXT的关联程序就是记事本,所以只要这样就可以了

ShellExecute(Handle,"","c://hdc.txt","","",SW_SHOWNORMAL);

这个函数和WIN9X中的命令行命令"start"类似,不光可以对文件进行操作,还可以对HTTP、MAILTO等进行操作。这样我们就可以设计有超级链接风格的程序了。

例如在VB中,我们首先声明此函数(可由VB自带的API游览器得到):

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

然后放置两个Label,设置其属性为:

Name lbHomepage lbEMail
Caption .. mailto:hugsnow@126.com

并把字体改为蓝色有下划线,然后分别在两个Label的Click事件中加入以下代码:

ShellExecute(Me.hWnd,"",lbHomepage.Caption,"","",SW_SHOWNORMAL);

ShellExecute(Me.hWnd,"",lbEMail.Caption,"","",SW_SHOWNORMAL);

OK!试试看,如何?够酷的吧!

从上面可看出,ShellExecute的功能要强得多,并且可以完全替代WinExec(),事实上,WinExec()也是为了和以前版本兼容而保留,所以,我们要尽量使用ShellExecute()。其实在WinAPI中,还有一个函数ShellExecuteEx() ,但其使用复杂,又不支持Windows NT,所以这里就不作介绍了,有兴趣的可以自已查询WinAPI帮助。

Mysql 下载与安装问题三:应用程序无法正常启动0xc000007b

终于解决了问题二:
  • xunalove
  • xunalove
  • 2017年06月02日 07:29
  • 9059

MFC (opencv配置) 应用程序无法正常启动(0xc000007b)请单击“确定"关闭应用程序 的解决方法

前段时间,自己在VS2010写了一个程序,程序属性需要配置opencv,配置opencv2.4.3运行程序发现提示 :“ 应用程序无法正常启动(0xc000007b)。请单击“确定"关闭应用程序! ”...
  • hanxiaoyong_
  • hanxiaoyong_
  • 2017年08月26日 16:43
  • 757

应用程序无法正常启动(0xc0150002)

在Debug 程序的时候,程序无法运行,但是Release没有问题。 经过查找,找到一下文章 http://noyear.blog.51cto.com/819034/582792   应用程...
  • gengxt2003
  • gengxt2003
  • 2014年01月17日 11:05
  • 7145

VS2010 由于应用程序配置不正确,程序未能启动”--原因及解决方法

项目--->配置属性---->链接器---->清单文件--->生成清单-->设置为"否" .  然后重新生成解决方案,编译,搞定....
  • u012377333
  • u012377333
  • 2014年08月13日 17:07
  • 2488

解决“由于应用程序配置不正确,应用程序未能启动”的问题

        使用vc2005编写的程序,在运行时提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”。依赖的dll都有在,怎么会提示错误呢。         其实...
  • domisou
  • domisou
  • 2008年02月24日 15:28
  • 2062

应用程序无法正常启动0xc000007b的问题

1.情景描述: 由于接手其他人的程序,编译可以过,但运行程序就会出现0xc000007b的问题。 2.问题排查 a)因为本机安装了VS2012,所以所有关于C++库或者相关原因都可排除。 b)...
  • zhuyunfei
  • zhuyunfei
  • 2016年09月03日 09:20
  • 10382

VS2005 安装文件 "由于应用程序配置不正确,应用程序未能启动"

最近用vc2005写了一个程序,拷贝到其它机器上运行时,提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”。觉得很奇怪,依赖的dll都有在,怎么会提示错误呢。马上上...
  • denglei265
  • denglei265
  • 2008年01月17日 17:59
  • 14437

由于应用程序配置不正确,程序未能启动”--原因及解决方法

由于应用程序配置不正确,程序未能启动”--原因及解决方法http://moogge.spaces.live.com/blog/cns!ab9b00d806d52aed!245.entry问题描述:当运...
  • skyremember
  • skyremember
  • 2008年12月05日 19:38
  • 201095

VS2008+opencv 应用程序无法正常启动(0xc000007b)。

今天将以前写的vs2008+opencv的32位的程序改成64位的,x64配置完成之后,重新生成解决方案,成功。但是运行的时候,却弹出“应用程序无法正常启动(0xc000007b)。请单击“确定”关闭...
  • fengqiusuo
  • fengqiusuo
  • 2015年10月14日 10:31
  • 1604

应用程序无法正常启动提示错误0xc000007b 问题的原因和解决方法

应用程序无法正常启动提示错误0xc000007b 问题的原因和解决方法 前提条件: 你使用的是VS201x软件编写程序,你使用的电脑是X64位的,并且你在使用OpenCV库。你编写的程序可以...
  • github_35160620
  • github_35160620
  • 2016年07月10日 04:02
  • 21859
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:启动新的应用程序
举报原因:
原因补充:

(最多只允许输入30个字)