Win32程序支持命令行参数的做法
作者:朱金灿
来源:http://blog.csdn.net/clever101
首先说说Win 32 API程序如何支持命令行参数。Win 32程序的入口函数为:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
其中lpCmdLine为命令行参数,所以只需把它解析出来即可。
比如一个win32程序为a.exe,它的命令行用法如下:
a.exe 文件1 文件2
那么可以这样解析:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{ int argc = 0;
LPWSTR *lpszArgv = NULL;
//分割命令行参数
lpszArgv = CommandLineToArgvW(lpCmdLine, &argc);
if (argc >= 2)
{
if(::GetFileAttributes(lpszArgv[0])==-1)
{
//文件1不存在
::MessageBox(GetDesktopWindow(),lpszArgv[1],_T("提示"), MB_OK|MB_ICONINFORMATION);
return 1;
} if(::GetFileAttributes(lpszArgv[1])==-1)
{
//文件2不存在
::MessageBox(GetDesktopWindow(),lpszArgv[2],_T("提示"), MB_OK|MB_ICONINFORMATION);
return 1;
}
}
如果是一个MFC程序,做法比Win 32 API程序多一步,就是获取命令行字符串。具体如下:
BOOL CXxxAppApp::InitInstance()
{
LPTSTR pszCmdLine = GetCommandLine(); //获取命令行参数;
LPWSTR *lpszArgv = NULL;
int argc = 0;
lpszArgv = CommandLineToArgvW(pszCmdLine,&argc); //拆分命令行参数字符串
// 下面的处理和win32 api程序一样,
}
有四点需要注意:
1. Win 32 API程序的命令行lpCmdLine是只包含参数,而MFC程序的命令行第一个参数是exe本身。
2. GetCommandLine获取的是一个unicode字符串,CommandLineToArgvW也只能处理unicode字符串,如果你的程序选择的是多字节字符集,需要进行处理。
3. CommandLineToArgvW是按空格来拆分参数的,如果从参数是文件路径,就不要用CommandLineToArgvW了,因为文件路径本身可能带有空格,可以用正则表达式来解析。
4. 命令行的调试可以这样设置:
Win32程序支持命令行参数的做法的更多相关文章
- Win32程序支持命令行参数的做法(转载)
转载:http://www.cnblogs.com/lanzhi/p/6470406.html 转载:http://blog.csdn.net/kelsel/article/details/52759 ...
- 让.Net程序支持命令行启动
很多时候,我们需要让程序支持命令行启动,这个时候则需要一个命令行解析器,由于.Net BCL并没有内置命令行解析库,因此需要我们自己实现一个.对于简单的参数来说,自己写一个字符串比较函数来分析args ...
- 给go程序添加命令行参数
操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 问题描述 需要应用程序根据不同的配置文件访问不同的服务器,希望程序启动时可以指定配置文件. 解决方案 package main i ...
- 如何让python脚本支持命令行参数--getopt和click模块
一.如何让python脚本支持命令行参数 1.使用click模块 如何使用这个模块,在我前面的博客已经写过了,可参考:https://www.cnblogs.com/Zzbj/p/11309130.h ...
- Spring Boot程序接收命令行参数
Spring Boot程序接收命令行参数 输入一行,回车,触发一次.如果想要调用service层,也是可以,能调用service层,就可以做很多事,触发一次就好比调用了一次http接口一样 packa ...
- 在Xcode4中给程序提供命令行参数(转)
网上xcode4的资料实在是不多,再加上xcode4相对3的改动还那么大,并且还只有英文版.我为了这个问题头痛了很久.后来终于找到了...方法如下 xcode菜单的Product->EditSc ...
- .NET 命令行参数包含应用程序路径吗?
如果你关注过命令行参数,也许发现有时你会在命令行参数的第一个参数中中看到应用程序的路径,有时又不会.那么什么情况下有路径呢? 其实是否有路径只是取决于获取命令行参数的时候用的是什么方法.而这是 Win ...
- Appium 服务命令行参数
Appium 可以直接通过命令行启动,同样支持命令行参数配置 参考: http://appium.io/slate/cn/master/ 使用方法 例如: appium --shell 服务器标志 ...
- 如何编写一个带命令行参数的Python文件
看到别人执行一个带命令行参数的python文件,瞬间觉得高大上起来.牛逼起来,那么如何编写一个带命令行参数的python脚本呢?不用紧张,下面将简单易懂地让你学会如何让自己的python脚本,支持带命 ...
随机推荐
- MyBatis——Mapper XML 文件
Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会 ...
- IPMI相关漏洞利用及WEB端默认口令登录漏洞
IPMI相关漏洞 0套件漏洞 使用0套件时,只需要Username,口令任意即可绕过身份鉴别执行指令.而且一般还有一个默认的账户admin或者ADMIN. 备注:IPMI是一套主机远程管理系统,可以远 ...
- centos6.8上安装paramiko
author : headsen chen date: 2018-10-07 17:06:07 # 安装gcc,python-devel yum -y install python-devel ...
- 【BZOJ2661】[BeiJing wc2012]连连看 最大费用流
[BZOJ2661][BeiJing wc2012]连连看 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给 ...
- maven学习(一)(转)
我记得在搞懂maven之前看了几次重复的maven的教学视频.不知道是自己悟性太低还是怎么滴,就是搞不清楚,现在弄清楚了,基本上入门了.写该篇博文,就是为了帮助那些和我一样对于maven迷迷糊糊的人. ...
- jQuery Ajax 全解析(转载)
本文地址: jQuery Ajax 全解析 本文作者:QLeelulu 转载请标明出处! jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写Java ...
- SVN 配置和使用
SVN使用环境 使用SVN管理源代码,必须有2套环境 服务器 用来存储客户端上传的源码 一般都是在Windows环境下安装Visual SVN Server 客户端 用来提交.回退.修改.下载等操作 ...
- 170509、文本编辑器编写的shell脚本在linux下无法执行的解决方法
今天碰到一个奇怪的问题,编写好的shell脚本再linux上执行一直提示找不到文件或目录,后来想想是文本编辑器的问题,记录下来!!! 1.查看当前文本格式 Notepad++界面中,在右下角有文件格式 ...
- easyui 下对radio的选中操作
在easyui框架下对radio 基本和没有用其的情况差不多,但是给radio赋值时不一样,不能用attr这个了,要用prop 我测试了一下 在谷歌 火狐和ie下都可以.
- LinearLayout学习笔记
线性布局分两种,分别是水平线性布局和垂直线性布局,对应设置为android:orientation="horizontal"/"vertical". Linea ...