Win32中调用其他应用程序的方法(函数)winexec,shellexecute ,createprocess
目录
简介
三个SDK函数( WinExec、ShellExec、CrateProcess )的语法:
1、WinExec
2、ShellExecute
3、CreateProcess
ShellExcute的常见用法
简介
WinExec,ShellExecute ,CreateProcess这三个win32API均可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂。
WinExec 两个参数,前一个指定路径,后一个指定显示方式,只能用来打开程序。
ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。
CreateProcess 一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等。如果我们要得到足够多的关于新的进程的信息,控制新的进程的细节属性,若要达到这些目的,我们就需要使用CreateProcess函数了。
需要注意的是,C++中所表示的路径要用 " \\"而不是平常所用的" \ "。
三个SDK函数( WinExec、ShellExec、CrateProcess )的语法:
1、WinExec
这个函数最简单,只有两个参数,只能用来打开程序,原型如下:
UINT WinExec(
LPCSTR lpCmdLine, // 命令路径
UINT uCmdShow // 显示方式
);
使用方法如下:
WinExec("Notepad.exe",SW_SHOW); // 打开记事本
WinExec("D:\\ProgramFiles\\Test\\Test.exe",SW_SHOWMAXIMIZED); // 以最大化的方式打开Test.exe
需要注意的是若用 SW_SHOWMAXMIZED 方式去加载一个无最大化按钮的程序,譬如Neterm,Calc 等等,就不会出现正常的窗体,但是已经被加到任务列表里了。
2、ShellExecute
原型如下:
HINSTANCE ShellExecute(
HWND hwnd, //父窗口句柄
LPCTSTR lpOperation, //操作, 打开方式"edit","explore","open","find","print","NULL"
LPCTSTR lpFile, //文件名,前面可加路径
LPCTSTR lpParameters, //参数
LPCTSTR lpDirectory, //默认文件夹
INT nShowCmd //显示方式
);
使用方法如下:
ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);// 打开C:\Test.txt 文件
ShellExecute(NULL, "open","http://www.google.com",/ NULL, NULL, SW_SHOWNORMAL); // 打开网页www.google.com
ShellExecute(NULL,"explore","D:\\C++",NULL,NULL,SW_SHOWNORMAL); // 打开目录D:\C++
ShellExecute(NULL,"print","C:\\Test.txt",NULL,NULL,SW_HIDE); // 打印文件C:\Test.txt
ShellExecute不支持定向输出。
3、CreateProcess
原型如下:
BOOL CreateProcess(
LPCTSTR lpApplicationName, //执行程序名
LPTSTR lpCommandLine, // 参数行
//下面两个参数描述了所创建的进程和线程的安全属性,如果为NULL则使用默认的安全属性
LPSECURITY_ATTRIBUTES lpProcessAttributes, //process security attributes
LPSECURITY_ATTRIBUTES lpThreadAttributes, // thread security attributes
BOOL bInheritHandles, // 继承标志
DWORD dwCreationFlags, // 创建标志
LPVOID lpEnvironment, // 环境变量
LPCTSTR lpCurrentDirectory, // 运行该进程的初始目录
LPSTARTUPINFO lpStartupInfo, // 用于在创建子进程时设置各种属性
LPPROCESS_INFORMATION lpProcessInformation //用于在进程创建后接受相关信息
;
使用方法如下:
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
si.wShowWindow=SW_SHOW;
si.dwFlags=STARTF_USESHOWWINDOW;
boolfRet=CreateProcess("D:\\putty.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
可以看出,通过上面的几个不同的方法,都可以实现在应用程序中打开其他应用程序的目的,其中有些方法可能会麻烦一点,所以就需要我们根据不同的目的去选择最适合自己的方法去实现自己的目的!
ShellExcute的常见用法
一、利用系统默认的邮件收发器发送电子邮件
Uses
..., ShellAPI;
Var
lpHwnd: HWND;
lpOperation, lpFile, lpParameters, lpDirectory: String;
Begin
lpHwnd:= GetDesktopWindow();
lpOperation:= 'open';
lpFile:= 'mailto:' + 'Maple119@263.net' + '?' //主邮件地址后以'?'结束
+ '&cc=' + 'balaba960808@163.com' //抄送
+ '&bcc=' + 'lyf.kibosoft.com' //暗送
+ '&subject=' + '主题'
+ '&body='+ '第一行内容' + '%0d' + '第二行内容' //主题内容以 '%0d' 转行
+ '&File=' + 'D:\Help.rtf'; //附件只对 Outlook Express 有效
lpParameters:= '';
lpDirectory:= '';
ShellExecute(lpHwnd, pChar(lpOperation),
pChar(lpFile), pChar(lpParameters),
pChar(lpDirectory), SW_SHOWNORMAL);
End;
二、打开一个网页
ShellExecute(0, 'open', 'http://www.google.com', '', '', SW_SHOWNORMAL);
三、打印文档
ShellExecute(0, 'print', 'D:\Help.rtf', '', '', SW_SHOWNORMAL)
四、利用系统默认的程序打开指定的文件
ShellExecute(0, 'open', 'D:\Help.rtf', '', '', SW_SHOWNORMAL))
五、用指定的程序打开指定的文件
ShellExecute(0, 'open', 'notepad.exe', 'D:\Help.rtf', '', SW_SHOWNORMAL)
六、执行快捷方式(.LNK)
ShellExecute(handle,'open','c:\windows\desktop\aaa.lnk','', '', sw_hide);
WinExec主要运行EXE文件。如:WinExec(’Notepad.exe Readme.txt’, SW_SHOW);
ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。
首先必须引用shellapi.pas单元:uses ShellAPI;
1.标准用法
ShellExecute函数原型及参数含义如下:
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。
若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。
Win32中调用其他应用程序的方法(函数)winexec,shellexecute ,createprocess相关推荐
- vc执行linux脚本,VC中调用其他应用程序的方法(函数) WinExec,ShellExecute ,CreateProcess...
三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,Cr ...
- vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,Cr ...
- vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess 1
三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,Cr ...
- JS中调用本地Winform程序并传递参数
场景 JS中调用本地exe程序: JS中调用本地exe程序_BADAO_LIUMANG_QIZHI的博客-CSDN博客 在上面的基础上怎样在js中调用本地winform程序并且传递参数. 注: 博客: ...
- CDR插件开发之CPG插件018 - 在CPG插件中调用外部EXE程序并传递参数
在上篇文章中,讲解了CPG插件在VS2019中实现调试的具体方法.本文以具体代码为例,讲解在CPG插件中调用外部EXE程序,并传递运行参数的方法. 工程搭建准备 按照惯例,本篇文章的序号为018,请直 ...
- Oracle数据库中调用Java类开发存储过程、函数的方法
Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日 浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...
- php调用会员刷卡,dedecms模板中调用会员信息标签的方法
dedecms模板中调用会员信息标签的方法 比如你想在DEDE首页或者内页里调用会员:用户名.昵称.性别.会员等级.注册邮箱.会员级别等信息.就需要我们本篇教程提供的调用标签了. 首先,我们打开文件 ...
- 织梦cms php中调用当前频道,DEDE织梦CMS模板在runphp=yes的标签中调用其他field值的方法...
这篇文章主要为大家详细介绍了DEDE织梦CMS模板在runphp=yes的标签中调用其他field值的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴. Ded ...
- linux关闭无响应文件夹,4种强制关闭Ubuntu中无响应应用程序的方法
4种强制关闭Ubuntu中无响应应用程序的方法 在使用Ubuntu时,我们的一个或多个进程和应用程序可能会经常挂起.重新启动我们的系统并不总是最佳解决方案,我们发现自己在寻找能够快速.轻松和安全地摆脱 ...
最新文章
- idea社区版和企业版区别_IntelliJ IDEA 旗舰版与社区版有什么不同
- 蓝绿发布、滚动发布、灰度发布,有什么区别?
- CCPC Training Class
- “预习-上课-复习”:达摩院类人学习新范式探索
- python3 读取文本文件_python3读取文件最简单的办法
- 数据结构实验:一元多项式计算器
- 制作一个状态栏中跑马灯效果_图标设计指南(3)——制作一个图标集所需全部信息(中)...
- kuboard使用mysql_基于 Kubernetes 的微服务图形化管理界面 Kuboard
- 【Python基础】文件读写
- 分数的全面解析式与在C语言中应用分数计算
- 关于u盘文件或目录损坏且无法读取的解决方法
- 月薪30K的硬件工程师需要哪些技能
- 大创会议议程2021-10-17
- 聚观早报 | 明年起手机预装APP均可卸载;爱奇艺VIP会员再次涨价
- FreeRTOS 简介
- 用HTML制作代码雨源码分享
- 将GIF转成视频MP4、MOV
- 【编程练习】小强去春游
- Autodesk Maya 2018.6 中文特别版 Mac 顶级三维动画制作工具
- NOI Online 2020 Round3 滚粗记
热门文章
- 西门子PLC1200 Modbus TCP通讯
- IDOC日志查询报表
- php名片自动生成,利用PHP自动生成印有用户信息的名片
- docker1.12在cento7里的组建swarm (一)
- 教你用TensorFlow做图像识别
- Alienware 17 R4安装windows10与ubuntu16.04双系统
- t3服务器补丁文件夹在哪,打了最新补丁之后,T3软件无法打开!并且目录里没有补丁脚本文件夹!...
- 学习Java要下载什么软件?用来做什么?
- 如何在win 10 家庭版上安装日语语言包
- 2021-06-14Leetcode4.寻找两个正序数组的中位数