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)

  1. argc = argument count :表示传入main函数的数组元素(参数)个数,为int类型
  2. 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","参数一", "参数二"

声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。

本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。

我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

本周热议
鉴影记录
SpringCloud(1) - 入门概述
python每日一练之单元测试
k8s之etcd集群部署
zookeeper 实现一个简单的服务注册与发现(C++) 三:服务发现
zookeeper 实现一个简单的服务注册与发现(C++) 二:注册
zookeeper 实现一个简单的服务注册与发现(C++) 一:与zk保持连接
Java+MySQL笔记
一些零散笔记
TCP/IP协议栈相关知识点总结
Dart学习手册
9.ubuntu文件文本编码的查看与转换,乱码问题
C++输入输出流
扩展2
69-django-forms组件源码刨析、cookie与session
67-django-前后端传数据编码格式、ajax传json格式数据、ajax传文件数据、ajax与sweetalert结合二次确认、django自带的序列化组件、批量插入、分页器
66-django-模型层之choices参数、多对多三种创建方式、数据库三大设计范式、Ajax
64-django-模型层(ORM语法)单表查询、常见十几种查询方法、双下划线查询、多表操作、外键字段增删改查、跨表查询
62-django-无名有名分组反向解析、路由分发、名称空间、伪静态、pycharm虚拟环境、django版本区别、视图层之三板斧、JsonResponse、form表单上传文件、FBV与CBV
61-django-数据增删改、orm创建表关系、django请求生命周期流程图、路由层之路由匹配、无名分组、有名分组
HaowuliaoA

微信扫码关注 HaowuliaoA 订阅号

友情链接

支付猫
链才网-区块链英才
phpEnv集成环境
广州翻译公司
Lion技术博客
花香诱人醉
LyApi框架
凉风有信
快斗博客
佩晨的博客
蛙导
layui
WebIM
layer
layDate
申请友链
QQ联系