作者:朱金灿

来源: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程序支持命令行参数的做法的更多相关文章

  1. Win32程序支持命令行参数的做法(转载)

    转载:http://www.cnblogs.com/lanzhi/p/6470406.html 转载:http://blog.csdn.net/kelsel/article/details/52759 ...

  2. 让.Net程序支持命令行启动

    很多时候,我们需要让程序支持命令行启动,这个时候则需要一个命令行解析器,由于.Net BCL并没有内置命令行解析库,因此需要我们自己实现一个.对于简单的参数来说,自己写一个字符串比较函数来分析args ...

  3. 给go程序添加命令行参数

    操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 问题描述 需要应用程序根据不同的配置文件访问不同的服务器,希望程序启动时可以指定配置文件. 解决方案 package main i ...

  4. 如何让python脚本支持命令行参数--getopt和click模块

    一.如何让python脚本支持命令行参数 1.使用click模块 如何使用这个模块,在我前面的博客已经写过了,可参考:https://www.cnblogs.com/Zzbj/p/11309130.h ...

  5. Spring Boot程序接收命令行参数

    Spring Boot程序接收命令行参数 输入一行,回车,触发一次.如果想要调用service层,也是可以,能调用service层,就可以做很多事,触发一次就好比调用了一次http接口一样 packa ...

  6. 在Xcode4中给程序提供命令行参数(转)

    网上xcode4的资料实在是不多,再加上xcode4相对3的改动还那么大,并且还只有英文版.我为了这个问题头痛了很久.后来终于找到了...方法如下 xcode菜单的Product->EditSc ...

  7. .NET 命令行参数包含应用程序路径吗?

    如果你关注过命令行参数,也许发现有时你会在命令行参数的第一个参数中中看到应用程序的路径,有时又不会.那么什么情况下有路径呢? 其实是否有路径只是取决于获取命令行参数的时候用的是什么方法.而这是 Win ...

  8. Appium 服务命令行参数

    Appium  可以直接通过命令行启动,同样支持命令行参数配置 参考: http://appium.io/slate/cn/master/ 使用方法 例如: appium  --shell 服务器标志 ...

  9. 如何编写一个带命令行参数的Python文件

    看到别人执行一个带命令行参数的python文件,瞬间觉得高大上起来.牛逼起来,那么如何编写一个带命令行参数的python脚本呢?不用紧张,下面将简单易懂地让你学会如何让自己的python脚本,支持带命 ...

随机推荐

  1. Linux下多任务间通信和同步-mmap共享内存

    Linux下多任务间通信和同步-mmap共享内存 嵌入式开发交流群280352802,欢迎加入! 1.简介 共享内存可以说是最有用的进程间通信方式.两个不用的进程共享内存的意思是:同一块物理内存被映射 ...

  2. LeetCode——Product of Array Except Self

    Description: Given an array of n integers where n > 1, nums, return an array output such that out ...

  3. LeetCode——Intersection of Two Linked Lists

    Description: Write a program to find the node at which the intersection of two singly linked lists b ...

  4. 浅析HTTPS与SSL原理

    版权声明:本文由盛旷 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/134 来源:腾云阁 https://www.qclo ...

  5. css选择器的性能

    性能排序: 1.id选择器(#myid) 2.类选择器(.myclassname) 3.标签选择器(div,h1,p) 4.相邻选择器(h1+p) 5.子选择器(ul < li) 6.后代选择器 ...

  6. Android 生成分享长图并且添加全图水印

    转载自 : http://blog.csdn.net/gengqiquan/article/details/65938021 领导最近觉得携程的截屏生成长图分享效果比较好,所以我们也加了个:产品觉得分 ...

  7. Linux系统下编译连接C源代码

    gcc test.c -o test 一步到位的编译指令 得到 test 文件 gcc test.c 得到 test.out 文件 gcc -g -c test.c -o test 只生成目标文件(. ...

  8. 微信小程序 --- 设置页面的标题

    第一种方式:修改 page.json文件 { "navigationBarTitleText": "豆瓣 - 电影" } 第二种方式:使用 JS 修改: wx. ...

  9. 问答项目---账号密码异步校验后进行PHP校验

    在做登陆的时候,通过异步校验后还需要通过PHP来校验账号和密码的正确性. PHP校验账号密码: public function login(){ if(!IS_POST){echo "页面不 ...

  10. MYSQL创建数据表!

    几个常见的建表原则: a,表都加前缀b,所有的字段选择最小的数据类型,如id可以使用mediumint比INT节省25%的空间c,尽量所有的字段都设置为NOT NULL的,这样能让速度更快d,为合适的 ...