文档章节

使用CommandLineToArgvW获得Unicode版本GUI程序的命令行参数

seanking
 seanking
发布于 2016/02/15 14:27
字数 384
阅读 1K
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

控制台程序通过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


© 著作权归作者所有

seanking
粉丝 3
博文 14
码字总数 5960
作品 0
杭州
高级程序员
私信 提问
.NET/C# 将一个命令行参数字符串转换为命令行参数数组 args

版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/...

walter lv
2019/03/04
0
0
如何使用Windows命令行环境查找和替换文件中的文本?

我正在使用Windows命令行环境编写批处理文件脚本,并希望用另一个文件(例如“ BAR”)更改文件中每个文本(例如“ FOO”)的每次出现。 最简单的方法是什么? 有内置功能吗? #1楼 我在这里...

javail
01/21
47
0
使用Ahk2Exe工具将AutoHotKey脚本打包到Windows可执行文件

写在前面的两点说明: 1、我的操作系统版本为Win7,AutoHotKey版本为1.1.23.05。 2、因AutoHotKey单词太长,所以在下文中统一用缩写AHK代替。 方法一:通过Windows上下文菜单快速创建EXE文件...

北风其凉
2016/04/27
1.2K
0
高性能 C++ 通用日志组件--VC-Logger

VC-Logger 是一个简单易用的 C++ 程序通用日志组件。设计时着重考虑三个方面:功能、可用性和性能。为了让大家能更方便的学习 VC-Logger,特此精心制作了几个测试用例:TestGUILogger(GUI 版...

伤神小怪兽
2013/06/13
1.5W
0
VC-Logger v2.0.3 发布,高性能 Windows C++ 日志组件

VC-Logger 是一个简单易用的 C++ 程序通用日志组件。设计时着重考虑三个方面:功能、可用性和性能。为了让大家能更方便的学习 VC-Logger,特此精心制作了几个测试用例:TestGUILogger(GUI 版...

伤神小怪兽
2013/06/14
1.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

【JVM】JVM各个内存区域的情况图解

public class NormalJava { /*普通方法*/ public void normal(int money){ money = money -100; } public static void main(String[] args) { NormalJava normalJava = new NormalJava(); no......

郭恩洲_OSC博客
今天
16
0
Java中JNI的使用详解第三篇:JNIEnv类型中方法的使用

在来看一下C++代码: #include<iostream.h> #include "com_jni_demo_JNIDemo.h" JNIEXPORT void JNICALL Java_com_jni_demo_JNIDemo_sayHello (JNIEnv * env, jobject obj) { //获取obj中对象......

天王盖地虎626
今天
21
0
直播撬动618变局:抖快凶猛、商家清醒

  文/鸿键   来源:深响(ID:deep-echo)   核心要点   直播带货热潮持续升温,今年的传统电商大促节 618 成了第一个“全民直播”的 618,直播带货不仅为电商带来增量,同时也搅动着行...

计算无敌
今天
30
0
《一天一模式》— 观察者模式

一、观察者模式的概念 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题...

XuePeng77
昨天
11
0
趣店2020Q1财报:总收入9.58亿元,开放平台交易金额26亿元

镭射财经5月26日消息 趣店(NYSE:QD)发布2020Q1财报。截至发稿,趣店股价1.57美元,市值3.98亿美元。 财报显示,趣店2020Q1总收入9.58亿元(单位:人民币,下同),净亏损4.86亿元;开放平...

镭射财经
昨天
26
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部