MFC带参数启动指令发送与接收
MFC带参数启动指令发送与接收
发送
使用ShellExecute函数打开文件或执行程序。
函数原型:
HINSTANCE ShellExecute(
_In_opt_ HWND hwnd,//父窗口句柄或出错时显示错误父窗口的句柄,可以为 NULL
_In_opt_ LPCTSTR lpOperation,//操作
_In_ LPCTSTR lpFile,//要打开的文件名、执行的程序名、浏览的文件夹等。
_In_opt_ LPCTSTR lpParameters,//可执行程序的参数,否则为 NULL
_In_opt_ LPCTSTR lpDirectory,//默认目录
_In_ INT nShowCmd//显示类型
);
lpOperation是一个字符串,通常为:
- edit: 用编辑器打开 lpFile 指定的文档,如果 lpFile 不是文档,则会失败
- explore: 浏览 lpFile 指定的文件夹
- find: 搜索 lpDirectory 指定的目录
- open: 打开 lpFile 文件,lpFile 可以是文件或文件夹
- print: 打印 lpFile,如果 lpFile 不是文档,则函数失败
- properties: 显示属性
- runas: 请求以管理员权限运行,比如以管理员权限运行某个exe
- NULL: 执行默认"open"动作
nShowCmd是执行操作之后程序显示类型,指定该参数后运行起来的程序不一定能按照指定参数显示,只是通知程序的显示状态。类型如下:
- SW_HIDE 隐藏窗口,活动状态给令一个窗口
- SW_MINIMIZE 最小化窗口,活动状态给令一个窗口
- SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态
- SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态
- SW_SHOWMAXIMIZED 最大化窗口,并将其激活
- SW_SHOWMINIMIZED 最小化窗口,并将其激活
- SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口
- SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口
- SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口
- SW_SHOWNORMAL 与SW_RESTORE相同
示例:
//打开程序
ShellExecute(NULL,L"open",L"notepad.exe", command, NULL, SW_SHOW );
//用系统打印机打印文档
ShellExecute(NULL,L"print", L"c:\\abc.txt",NULL, NULL, SW_HIDE);
//用系统查找功能来查找指定文件
ShellExecute(NULL,L"find",L"d:\\nish", NULL, NULL, SW_SHOW);
接收:参数单个的话建议方法一,多个的话建议方法三
方法一(不带本程序路径的所有参数作为整体获取)
MFC中的AFXWIN.H中自带一个成员变量m_lpCmdLine,该成员变量用来保存可执行文件名后的参数。
在工程的app类的InitInstance初始化函数中,添加对m_lpCmdLine变量的判断。
示例
m_command="无参数";//要现在app类中定义此变量
if ((m_lpCmdLine[0] != _T('\0')) )//例子
{
m_command = m_lpCmdLine;
}
方法二(带本程序地址的所有参数作为整体获取)
CString sCmdline = ::GetCommandLine();
AfxMessageBox(sCmdline);
\\将获取到 "C:\test\app.exe -1 -2"
方法三(分开获取多个参数)
c++程序的main函数有两个参数:
int main(int argc, char* argv[]) 或者int main(int argc, char** argv)
- argc = argument count :表示传入main函数的数组元素(参数)个数,为int类型
- argv = argument vector :表示传入main函数的指针数组(参数数组),为char**类型。char **argv与char *argv[]等价。
第一个数组元素argv[0]是程序名称,并且包含程序所在的完整路径。argc至少为1,即argv数组至少包含程序名。
示例:
for (int i = 0; i < __argc; i++)
{
__argv[i];
AfxMessageBox(__argv[i]);
}
//将依次得到"C:\test\app.exe","参数一", "参数二"
MFC带参数启动指令发送与接收的更多相关文章
- mfc 带参数的构造函数
知识点 默认的构造函数 带参数的构造函数 重载构造函数 一.默认的构造函数 二.带参数的构造函数 三.重载构造函数 class Tdate { public: int year;//年 int mon ...
- 【转】winform带参数启动另一个exe
启动EXE string arg1 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; string arg2 = "bbbbbbbbbbbbbbbb ...
- MFC实现http连接、发送和接收数据
#include <afxinet.h> // 设置超时 CInternetSession session; session.SetOption(INTERNET_OPTION_CONNE ...
- Intellij IDEA带参数启动Springboot注意事项
问题 不同版本的spring-boot-maven-plugin的jvm参数配置有所不同,同时与通过main方法启动springboot程序传递参数也有所不同. 分析 在运行main方法时,可以通过j ...
- shell脚本带参数启动项目
用maven工程打包时,会将数据库连接一并打进去,如果需要经常修改数据库连接,则需要打开jar包然后修改配置,这样很麻烦耗时并且容易出错. 因此需要将数据库配置放入项目外,这样修改数据库时去固定的配置 ...
- C++第四十七篇 -- VS2017带参数启动调试程序
参考链接:https://www.cnblogs.com/kileyi/p/10163269.html 举例:Test_Bluetooth.exe -help Test_Bluetooth.cpp # ...
- VS2017 带参数启动调式程序
有些程序,比如FFPlay,需要传递命令行参数才能运行想要的功能,比如字幕, ffplay -vf subtitles=mv.mkv mv.mkv 参数是 -vf subtitles=mv.mkv m ...
- docker 带参数启动 配合springboot profile
dockerfile FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD test-push-service--SNAPSHOT.jar app. ...
- 【转】如何在命令行脚本中启动带参数的Windows服务
我们有一个自己编写的Windows服务,我们希望该服务在启动时可以根据用户输入的参数实现不同的功能. 要实现这样的需求并不是很难,下面这个例子我用来示范如何编写该服务 using System; us ...
随机推荐
- 关于mysql的范式——反范式的思路
数据库的设计,是有模式的,就是在实际生产的项目中,按照怎样怎样步骤的去做.减少冗余呀,一对多呀等等. 那么回归到一个问题:数据库究竟是为了添加,还是为了查询?这个问题有些轴,以 增删改查四律而言,都是 ...
- 计算某天的下一天:黑盒测试之等价类划分+JUnit参数化测试
题目要求 测试以下程序:该程序有三个输入变量month.day.year(month.day和year均为整数值,并且满足:1≤month≤12.1≤day≤31和1900≤year≤2050),分别 ...
- javascript-数组简单的认识
一起组团(什么是数组) 我们知道变量用来存储数据,一个变量只能存储一个内容.假设你想存储10个人的姓名或者存储20个人的数学成绩,就需要10个或20个变量来存储,如果需要存储更多数据,那就会变的更麻烦 ...
- QtConcurrent::run 运行类的成员函数
https://stackoverflow.com/questions/2152355/is-it-possible-to-use-qtconcurrentrun-with-a-function-me ...
- Google Play商店为预注册的游戏和应用提供自动安装功能
谷歌 Play 商店一直在准备一项功能,它可以自动安装用户预先注册的应用程序和游戏.似乎该功能现已开始向第一批用户推出.有些人在预注册时会看到一个新选项,使他们能够利用发布时自动安装的功能. 用户在 ...
- c语言----- 冒泡排序 for while do-while 递归练习
1. 冒泡排序简介(默认从小到大排序) 核心思想:只比较相邻的两个元素,如果满足条件就交换 5 8 2 1 6 9 4 3 7 0 目标:0 1 2 3 4 5 6 7 8 9 第一次排序: 5 ...
- Vue Router路由守卫妙用:异步获取数据成功后再进行路由跳转并传递数据,失败则不进行跳转
问题引入 试想这样一个业务场景: 在用户输入数据,点击提交按钮后,这时发起了ajax请求,如果请求成功, 则跳转到详情页面并展示详情数据,失败则不跳转到详情页面,只是在当前页面给出错误消息. 难点所在 ...
- 蚂蚁金服合作的RISE实验室到底有多牛?
近日,蚂蚁金服与美国加州伯克利大学近期新成立的RISE实验室达成合作意向.RISE实验室的前身是著名伯克利AMP实验室,主导研发了当今大数据计算领域最前沿的开源系统:Apache Spark.Apac ...
- 龟兔赛跑算法 floyed判环算法
今天写线段树写到要用到这个算法的题目,简单的学习一下. https://blog.csdn.net/javaisnotgood/article/details/89243876 https://blo ...
- Re模块的方法补充
id_str = input("输入一个身份证号:") import re obj = re.compile(r"^([1-9]\d{16}[0-9x]|[1-9]\d{ ...