现在的位置: 首页 > 综合 > 正文

Win32命令行参数的传入和获取

2013年08月09日 ⁄ 综合 ⁄ 共 1586字 ⁄ 字号 评论关闭

Win32控制台,如何传入和获取命令行参数的有关问题,

有几种解决办法,

总结出来,朋友们一起分享

 

// tt.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include "afxinet.h"
#include <Windows.h>
#include <ShellAPI.h>
using namespace std;
#define BUFSIZE MAX_PATH

int _tmain(int argc, _TCHAR* argv[])
{

	///*************
	//传入或者获取win32命令行传参数
	//**************/
	
	//方法一
	wstring strExePath=L"C:\\Program Files\\111.exe";
	wstring strParamete=L"W";
	ShellExecute(NULL, _T("open"), strExePath.c_str(), strParamete.c_str(), NULL, SW_SHOWNORMAL);

	////方法二
	///**********
	////这种传参数的方法不可行
	//argv[1]=L"C:\\111.exe";
	//argv[2]=L"G";
	//***********/


	////方法三 使用for循环
    for(int i=0; i< argc; i++)
	{
		_TCHAR* Str_Cmd = argv[i];
		string sStr_Cmd ;

		//Unicode转换为ASCII,也即是宽字节转换为单字符,代码
		int UnicLen;
		UnicLen=::WideCharToMultiByte(CP_UTF8,NULL,Str_Cmd,wcslen(Str_Cmd),NULL,0,NULL,NULL);
		char*str_ASCII=new char[UnicLen+1];
		ZeroMemory(str_ASCII,UnicLen+1);
		::WideCharToMultiByte(CP_UTF8,NULL,Str_Cmd,wcslen(Str_Cmd),str_ASCII,UnicLen,NULL,NULL);
		str_ASCII[UnicLen]='\0';
		/////////
		sStr_Cmd = str_ASCII;
		wcout<<sStr_Cmd.c_str()<<endl;

	}


	/**************
	方法四GetCommandLineW()
	***************/
	/*wstring str_cmd;
	str_cmd = ::GetCommandLineW();
	*/

	/**************
	方法五CommandLineToArgvW()
	***************/
	/**
	LPWSTR *szArgList; 
	int argCount; 

	szArgList = CommandLineToArgvW(GetCommandLine(), &argCount); 
	if (szArgList == NULL) 
	{ 
		MessageBox(NULL, L"Unable to parse command line", L"Error", MB_OK); 
		return 10; 
	} 

	for(int i = 0; i < argCount; i++) 
	{ 
		MessageBox(NULL, szArgList[i], L"Arglist contents", MB_OK); 
	} 

	LocalFree(szArgList); 
	***/

	//判断结果
	if(argc == 1)
	{
		cout<<"命令行没有参数"<<endl;
		//return 0;
	}else if(argc == 2){
		cout<<"命令行一个参数"<<endl;
	}else{
		cout<<"命令行两个参数"<<endl;
	}

        //方法六  AfxGetApp()->m_lpCmdLine;


	return true;
}

 

抱歉!评论已关闭.