WinExec、ShellExecute用法详解「建议收藏」

WinExec、ShellExecute用法详解「建议收藏」1、WinExec():  WinExec主要运行EXE文件,不能运行其他类型的文件,不用引用特别单元。原型是:UINTWinExec(exePath,ShowCmd)  参数说明:  –xePath:命令行参数。注意,要用pChar转化一下。  –ShowCmd:外部程序的运行方式。其取值如下:  —-SW_HIDE隐藏  —-SW_MAXI…

大家好,又见面了,我是你们的朋友全栈君。

1、WinExec():

  WinExec主要运行EXE文件,不能运行其他类型的文件,不用引用特别单元。原型是:

UINT WinExec(exePath,ShowCmd)

  参数说明: 

  --xePath:命令行参数。注意,要用pChar转化一下。

  --ShowCmd:外部程序的运行方式。其取值如下: 

  ----SW_HIDE 隐藏 

  ----SW_MAXIMIZE 最大化 

  ----SW_MINIMIZE 最小化,并把Z order顺序在此窗口之后(即窗口下一层)的窗口激活 

  ----SW_RESTORE 激活窗口并还原为初始化大小 SW_SHOW 以当前大小和状态激活窗口 

  ----SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态 

  ----SW_SHOWDEFAULT 以默认方式运行

  ----SW_SHOWMAXIMIZED 激活窗口并最大化 

  ----SW_SHOWMINIMIZED 激活窗口并最小化 

  ----SW_SHOWMINNOACTIVE 最小化但不改变当前激活的窗口 

  ----SW_SHOWNA 以当前状态显示窗口但不改变当前激活的窗口 

  ----SW_SHOWNOACTIVATE 以初始化大小显示窗口但不改变当前激活的窗口 

  ----SW_SHOWNORMAL 激活并显示窗口,如果是最大(小)化,窗口将会还原。第一次运行程序 时应该使用这个值 

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

  --0 系统内存或资源不足 

  --ERROR_BAD_FORMAT .EXE文件格式无效(比如不是32位应用程序) 

  --ERROR_FILE_NOT_FOUND 指定的文件设有找到

  --ERROR_PATH_NOT_FOUND 指定的路径没有找到

         示例,我想要用记事本打开”C:\HDC.TXT”,以正常方式运行:

WinExec(pChar('notepad.exe C:\HDC.TXT'),SW_SHOWNORMAL); 

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

 

2、ShellExecute() :

  不仅可以运行EXE文件,也可以运行系统已经关联的文件。这个函数和WIN9X中的命令行命令”start”类似,不仅可以对文件进行操作,还可以对HTTP、MAILTO等进行操作。这样我们可以设计有超级链接风格的程序了。ShellExecute的功能要强得多,并且可以完全替代WinExec(),事实上,WinExec()也是为了和以前版本兼容而保留,所以,我们要尽量使用ShellExecute()。

  首先必须引用shellapi.pas单元:uses ShellAPI; 函数原型:

function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall; 

参数含义如下: 

--hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。例如,可以将其设置为应用程序主窗口
      句柄,即Application.Handle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。 

  --Operation:用于指定要进行的操作。

  ----open:操作表示执行由FileName参数指定的程序,或打开由FileName参数指定的文件或文件夹;

  ----print:操作表示打印由FileName参数指定的文件;

  ----explore:操作表示浏览由FileName参数指定的文件夹。

  ----为nil时,表示执行默认操作“open”。 

  --FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。 

  --Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。 

  --Directory:用于指定默认目录。 

  --ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。 

  ----SW_HIDE 隐藏 

  ----SW_MAXIMIZE 最大化 

  ----SW_MINIMIZE 最小化,并把Z order顺序在此窗口之后(即窗口下一层)的窗口激活 

  ----SW_RESTORE 激活窗口并还原为初始化大小 SW_SHOW 以当前大小和状态激活窗口 

  ----SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态 

  ----SW_SHOWDEFAULT 以默认方式运行

  ----SW_SHOWMAXIMIZED 激活窗口并最大化 

  ----SW_SHOWMINIMIZED 激活窗口并最小化 

  ----SW_SHOWMINNOACTIVE 最小化但不改变当前激活的窗口 

  ----SW_SHOWNA 以当前状态显示窗口但不改变当前激活的窗口 

  ----SW_SHOWNOACTIVATE 以初始化大小显示窗口但不改变当前激活的窗口 

  ----SW_SHOWNORMAL 激活并显示窗口,如果是最大(小)化,窗口将会还原。第一次运行程序 时应该使用这个值 

  若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。  刚才的例子:

WinExec(pChar('notepad.exe C:\HDC.TXT'),SW_SHOWNORMAL); 

就可以改变为(假设窗口的句柄为Handle) 

ShellExecute(Handle,'open','notepad','c:\taoyoyo.txt','',SW_SHOWNORMAL); 

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

ShellExecute(Handle,'','c:\taoyoyo.txt','','',SW_SHOWNORMAL); 

整理自:https://www.cnblogs.com/semth/p/10494685.html

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157289.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • request jsonify

    request jsonifypython的flask框架为用户提供了直接返回包含json格式数据响应的方法,即jsonify,在开发中会经常用到。如下一段简单的flask后端代码,服务端视图函数根据请求参数返回json格式的数据到客户端。转载于:https://www.cnblogs.com/daqingzi/p/9018283.html…

    2022年5月24日
    41
  • 11种经典滤波算法「建议收藏」

    11种经典滤波算法「建议收藏」1、限幅滤波法(又称程序判断滤波法)  A、方法:      根据经验判断,确定两次采样允许的最大偏差值(设为A)      每次检测到新值时判断:      如果本次值与上次值之差<=A,则本次值有效      如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值  B、优点:      能有效克服因偶然因素引起的脉冲干扰…

    2022年5月3日
    66
  • mapminmax 用法

    mapminmax 用法mapminmax是MATLAB实现归一化的工具包,默认:(1)将矩阵的每行分别进行归一化;(2)每行的最大值最小值作为每行归一化的xmin和xmax;(3)将数据归一化到[-1,1].若要将数据归一化到0到1之间,即y∈[0,1],使用b=mapminmax(a,0,1);若给与确定的最大值和最小值作为每行的xmin和xmax,使用:b= mapminmax(a,0,1);PS.xmin…

    2022年6月30日
    32
  • 使用C语言实现字符串分割

    使用C语言实现字符串分割之前分享了一篇使用C++(std::string作为容器)进行字符串分割的博文:https://blog.csdn.net/r5014/article/details/82802664 现在又想用C语言做一个字符串分割的函数,大概功能是这样:需要分割的字符串“  thisisacharactor raw.  ”使用”分割分割之后会返回一个char**…

    2022年5月20日
    36
  • 关于java代码生成器

    关于java代码生成器讲代码生成器之前先要说说模板,什么叫模板呢,举个例子吧,汇款单都见过吧,你不填写的那些内容都属于模板范畴说到这应该明白了吧,模板就是把共性提取出来反复使用,节约时间、工作量。。。。。那跟代码生成器有什么关系呢,思考一下在编程语言中所有的语言是不是都用共性或者说规范,这些都是固定不变的,在具体点,软件行业也是分主营业务的,比如OA、CRM、ERP、SCM等等,那么各个业务方向的软件

    2022年5月1日
    32
  • 最长上升子序列(n*log n)

    最长上升子序列(n*log n)转载于:http://www.cnblogs.com/dongsheng/archive/2013/01/25/2876323.htmlNYOJ-214单调递增子序列(二)单调递增子序列(二)时间限制:1000 ms |          内存限制:65535 KB难度:4 描述给定一整型数列{a1,a2…,an}(0<n<=100000),找出单…

    2022年6月8日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号