MFC程序获得命令行输入


一个unicode工程,需要处理很多文件,开始的时候没有做成console程序,发现程序写好之后出来了两个问题。程序通过CFileDialog来打开文件夹获得文件路径的。但是一个个打开太麻烦了。于是修改程序使程序接受命令传递的参数。这样就可以通过批处理来完成任务了。

方法1:

 

for (int i=0;i<__argc;i++)
{
__argv[i];
将依次得到C:\test\app.exe  -1  -2
}

这种和console得到命令参数区别不大,需要注意的是argv[i]前面是双下划线

ANSI console processes written in C can use theargc and argv arguments of the main function to access the command-line arguments. ANSI GUI applications can use thelpCmdLine parameter of the WinMain function to access the command-line string, excluding the program name. The reason thatmain and WinMain cannot return Unicode strings is thatargc, argv, and lpCmdLine use the LPSTR data type for parameters, not the LPTSTR data type. The GetCommandLine function can be used to access Unicode strings, because it uses theLPTSTR data type.

MSDN语句就不翻译了,大致意思就是argv得到的是LPSTR 类型的,ascii编码的。由于工程是UNICODE编码的因此不能,此时使用GetCommandLine

2、使用GetCommandLine

::GetCommandLine();

无参数,返回LPTSTR,根据工程的编码而定。但是需要注意的是,此时返回的是指向整个命令的指针。

eg:"C:\test\app.exe"  -1 -2批处理语句

那么将得到"C:\test\app.exe"  -1 -2整句话。而不是后面的参数-1,-2

3、AfxGetApp()->m_lpCmdLine;

这时只是得到后面的-1,-2参数


 核心编程中指出一个相当简单实用的方法:

 

应用程序可以按照它选择的方法来分析和转换命令行字符串。实际上可以写入p s z C m d L i n e参数指向的内存缓存,但是在任何情况下都不应该写到缓存的外面去。我总是将它视为只读缓存。如果我想修改命令行,首先我要将命令行拷贝到应用程序的本地缓存中,然后再修改本地缓存。也可以获得一个指向进程的完整命令行的指针,方法是调用G e t C o m m a n d L i n e 函数:

PTSTR GetCommandLine();

该函数返回一个指向包含完整命令行的缓存的指针,该命令行包括执行文件的完整路径名。

许多应用程序常常拥有转换成它的各个标记的命令行。使用全局性__argc(或__wargv)变量,应用程序就能访问命令行的各个组成部分。下面这个函数CommandLineToArgvW将Unicode字符串分割成它的各个标记:

PWSTR CommandLineToArgvW(PWSTR pszCmdLine,
   int pNumArgs); 

正如该函数名的结尾处的W 所暗示的那样,该函数只存在于U n i c o d e 版本中(W 是英文单词‘Wi d e ’的缩写)。第一个参数p s z C m d L i n e 指向一个命令行字符串。这通常是较早时调用G e t C o m m a n d L i n e W 而返回的值。P N u m A rg s 参数是个整数地址,该整数被设置为命令行中的参数的数目。C o m m a n d L i n e To A rg v W 将地址返回给一个U n i c o d e 字符串指针的数组。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值