//nArgs是数组中参数的个数
//数组的第一个元素表示进程的path,也就是szArglist[0],其他的元素依次是输入参数。
}
//取得参数后,释放CommandLineToArgvW申请的空间
LocalFree(szArglist);
在MFC程序中,可以用以下几种方法来获取命令行参数。getcommandlinea
为方便说明,我们假设执行了命令: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
获取命令行的方法:
1、GetCommandLine() 获取输入的所有信息,包括程序所在路径及参数
2、AfxGetApp()->m_lpCmdLine 只包含参数
一般情况下,获取到命令行后就可以针对命令行中的内容进行相应的处理了
CObject
└CCommandLineInfo
类CCommandLineInfo用于分析启动应用时的命令行参数。
MFC应用一般都会在它的应用对象中使用函数InitInstance创建这个类的一个本地实例。getcommandlinea
然后把该对象传给CWinApp::ParseCommandLine,ParseCommandLine又重复调用ParseParam填充CCommandLineInfo对象。
最后,CCommandLineInfo对象被传给CWinApp::ProcessShellCommand来处理命令行参数和选项。
BOOL CExampleApp::InitInstance()
{
...
// 分析标准外壳命令、DDE、打开文件操作的命令行
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// 调度在命令行中指定的命令。如果
// 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。
if (!ProcessShellCommand(cmdInfo))
return FALSE;
...
}
void CWinApp::ParseCommandLine(CCommandLineInfo& rCmdInfo)
{
for (int i = 1; i < __argc; i)
{
LPCTSTR pszParam = __targv[i];
BOOL bFlag = FALSE;
BOOL bLast = ((i 1) == __argc);
if (pszParam[0] == '-' || pszParam[0] == '/')
{
// remove flag specifier
bFlag = TRUE;
pszParam;
}
rCmdInfo.ParseParam(pszParam, bFlag, bLast);
}
}
目标
让应用程序处理这里所见的命令行标志。
>XXX.exe /c /d
策略
一个MFC应用程序可以用CCommandLineInfo类的成员函数ParseParam()处理一些标准标
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-37210-3.html
他晚上加班
礁只具有领海