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 ...
随机推荐
- JDBC 进阶:使用封装通用DML DQL 和结构分层以及at com.mysql.jdbc.PreparedStatement.setTimestamp空指针异常解决
准备: 数据表 CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(10) DEFAULT ...
- 数据库SQL---数据库系统概论
1.基本术语 1)信息:指数据加工处理后有用的数据. 2)信息的3种世界: (1)现实世界:存在于人脑之外的客观世界. (2)信息世界:现实世界在人脑中的反映. (3)数据世界:将信息世界中的信息通过 ...
- php utf-8
header(”Content-Type: text/html; charset=UTF-8″) 控制器控释模板输出: 值: array (size=8) 1 => array (size=4) ...
- 2019-2020-1 20199310《Linux内核原理与分析》第二周作业
1.问题描述 众所周知,计算机是20世纪最伟大的发明之一,计算机是如何工作的呢?本文主要通过计算机的组成结构和工作原理,以及汇编代码工作过程来进行详细叙述. 2.解决过程 2.1 冯·诺依曼体系结构 ...
- SQLI-LABS学习笔记(四)
第十六关 和之前的关卡一样,修改闭合,无意义的关卡 ")闭合即可 第十七关 这题从源码上看发现 这里进行了两次查询 先查询了用户名是否存在 再查询密码是否匹配 ...
- 2019-2020-1 20199325《Linux内核原理与分析》第六周作业
正常的使用gdb跟踪分析函数调用 使用make rootfs命令 *用gdb跟踪分析一个系统调用内核函数 对于宏SAVE_ALL来说,这条语句会保存当前线程的现场,然后是执行system_call,跳 ...
- Programmatically mount a Microsoft Virtual Hard Drive (VHD)
By Pixy https://stackoverflow.com/questions/24396644/programmatically-mount-a-microsoft-virtual-hard ...
- 双链表【参照redis链表结构】
参照了Redis里面的双链表结构,可以说是完全复制粘贴,redis的双链表还是写的很通俗易懂的,没有什么花里胡哨的东西,但是redis还有个iter迭代器的结构来遍历链表.我这里就没有实现了,只是实现 ...
- Django入门4: ORM 数据库操作
大纲 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 表结构 二.Django ORM基本增删改查 1.表数据增删改查 2.表结构修改 三.Django ORM 字段 ...
- CSS样式2
1.css重用 <style> .cl{ ... } .c2{ ... } .c{ ... } </style> <div class='c c2'></di ...