使用CommandLineToArgvW获得Unicode版本GUI程序的命令行参数
博客专区 > seanking 的博客 > 博客详情
使用CommandLineToArgvW获得Unicode版本GUI程序的命令行参数
seanking 发表于2年前
使用CommandLineToArgvW获得Unicode版本GUI程序的命令行参数
  • 发表于 2年前
  • 阅读 49
  • 收藏 0
  • 点赞 1
  • 评论 0

腾讯云实验室 1小时搭建人工智能应用,让技术更容易入门 免费体验 >>>   

摘要: CommandLineToArgvW 命令行参数获取

控制台程序通过main函数接口可以方便的实现命令行接口(CLI)并访问系统的环境变量,但是GUI程序隐藏了WinMain函数,淡化了CLI的作用。但是CLI依旧存在,并在程序的测试诊断和个性化定制上依旧起到特殊的作用。

众所周知控制台下main函数原形和MS定义的wmain函数原形,当然如果包含头文件<tchar.h>也可以用_tmain

int main( int argc, char* argv[], char* envp[]);
int wmain( int argc, wchar_t* argv[], wchar_t* envp[]);
int _tmain( int argc, _TCHAR* argv[], _TCHAR* envp[]);

下面是这段程序,编译运行后就可以在控制台输出命令行参数和系统的环境变量。

#include "stdafx.h"    //包含#include <tchar.h>
#include <iostream>
#include <string.h>
#ifdef _UNICODE
#define _tcout	std::wcout
#else
#define _tcout	std::cout
#endif
int _tmain(int argc, _TCHAR* argv[], _TCHAR* envp[])
{
	_tcout <<_T("[argv]")<< std::endl;
	for( int i = 0; i < argc; ++i ) 
		_tcout << i << _T(":\t") << argv[i] << std::endl;
	_tcout << std::endl <<_T("[envp]")<< std::endl;
	for( int i = 0; envp[i] != NULL; ++i ) 
		_tcout << i << _T(":\t") << envp[i] << std::endl;
	_tsystem(_T("pause"));
	return 0;
}

Unicode版本GUI程序,可以使用GetCommandLineW 和 CommandLineToArgvW函数来获得参数。

例如下面的程序

CMyApp::CMyApp()
{
	int nArgs;
	LPWSTR* lpArgs = CommandLineToArgvW(GetCommandLineW(), &nArgs);
	ASSERT( NULL != lpArgs );

	for(int i=0; i<nArgs; i++)
		TRACE(_T("%d:\t%ws\n"), i, lpArgs[i]);

	//注意:需要释放字符串空间
	LocalFree(lpArgs);
}

注意:

因为CommandLineToArgvW函数仅有Unicode版本,没有ANSI版本,因此GetCommandLine函数强制使用Unicode版本形式GetCommandLineW


共有 人打赏支持
粉丝 3
博文 12
码字总数 5369
评论 (0)
×
seanking
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: