Window中获得命令行参数的方法和通用的命令行分析方法
MFC中获取命令行参数的几种方法 在MFC程序中,可以用以下几种方法来获取命令行参数。
为方便说明,我们假设执行了命令:C:/test/app.exe -1 -2
方法一
::GetCommandLine();
将获取到 "C:/test/app.exe" -1 -2
方法二
for (int i=0;i<__argc;i++)
{
__argv[i];
将依次得到C:/test/app.exe -1 -2
}
方法三
AfxGetApp()->m_lpCmdLine;
将获取到 -1 -2
其他方法
如果希望支持MFC应用程序的标准命令行,还可以使用MFC中的CCommandLineInfo类。
// 要注意的地方是在UNICODE编码中 要使用__wargv 而不是 __argv
// 命令行的分析方法
struct Info{
unsigned long nID;
char cName[30];
char cPWD[16];
char cEMail[28];
char cPhone[16];
char cMPhone[16];
char cArea[50];
};
// 输入的命令行是
// TryArgv.exe -d 123 -n 帅哥男 -p 123 -e [email protected] -h 7099999 -m 245658 -a 中国
bool CTryArgvDlg::ArgvYes(Info& userInfo)
{
bool bHaveID = false;
bool bHaveName = false;
int i;
if (__argc > 1)
{
for(i = 1; i < __argc; ++i)
{
if ((__argv[i][0] == '-') || (__argv[i][0] == '/'))
{
switch(tolower(__argv[i][1]))
{
case 'd': // nID
userInfo.nID = atol(__argv[++i]);
bHaveID = true;
break;
case 'n': // cName
if(sizeof(userInfo.cName) <= strlen(__argv[i + 1]))
{
__argv[i + 1][sizeof(userInfo.cName)] = 0;
}
strcpy(userInfo.cName, __argv[++i]);
bHaveName = true;
break;
case 'p': // cPWD
if(sizeof(userInfo.cPWD) <= strlen(__argv[i + 1]))
{
__argv[i + 1][sizeof(userInfo.cPWD)] = 0;
}
strcpy(userInfo.cPWD, __argv[++i]);
break;
case 'e': // cEMail
if(sizeof(userInfo.cEMail) <= strlen(__argv[i + 1]))
{
__argv[i + 1][sizeof(userInfo.cEMail)] = 0;
}
strcpy(userInfo.cEMail, __argv[i + 1]);
break;
case 'h': // cPhone
if(sizeof(userInfo.cPhone) <= strlen(__argv[i + 1]))
{
__argv[i + 1][sizeof(userInfo.cPhone)] = 0;
}
strcpy(userInfo.cPhone, __argv[i + 1]);
break;
case 'm': // cMPhone
if(sizeof(userInfo.cMPhone) <= strlen(__argv[i + 1]))
{
__argv[i + 1][sizeof(userInfo.cMPhone)] = 0;
}
strcpy(userInfo.cMPhone, __argv[i + 1]);
break;
case 'a': // cArea
if(sizeof(userInfo.cArea) <= strlen(__argv[i + 1]))
{
__argv[i + 1][sizeof(userInfo.cArea)] = 0;
}
strcpy(userInfo.cArea, __argv[++i]);
break;
default:
break;
}
}
}
}
if(bHaveID && bHaveName)
{
return true;
}
return false;
}