【发布时间】:2020-05-01 19:34:49
【问题描述】:
我正在寻找合并批处理文件以向 MFC 应用程序发送参数而不是依赖于 GUI 界面的最佳方法。有谁知道这样做的最佳方法?
【问题讨论】:
-
有几种方法可以处理命令行参数。您现在有几个答案可以帮助您。
标签: user-interface mfc
我正在寻找合并批处理文件以向 MFC 应用程序发送参数而不是依赖于 GUI 界面的最佳方法。有谁知道这样做的最佳方法?
【问题讨论】:
标签: user-interface mfc
我在我的应用程序类的InitInstance 方法中使用以下代码:
LPWSTR *szArglist = nullptr;
int iNumArgs = 0;
szArglist = CommandLineToArgvW(GetCommandLine(), &iNumArgs);
if (iNumArgs > 0 && szArglist != nullptr)
{
for (int iArg = 0; iArg < iNumArgs; iArg++)
{
CString strArg(szArglist[iArg]);
int iDelim = strArg.Find(_T("="));
if (iDelim != -1)
{
CString strParamName = strArg.Left(iDelim);
CString strParamValue = strArg.Mid(iDelim + 1);
if (strParamName.CollateNoCase(_T("/lang")) == 0)
{
m_strPathLanguageResourceOverride.Format(_T("%sMeetSchedAssist%s.dll"),
(LPCTSTR)GetProgramPath(), (LPCTSTR)strParamValue.MakeUpper());
if (!PathFileExists(m_strPathLanguageResourceOverride))
m_strPathLanguageResourceOverride = _T("");
}
}
}
// Free memory allocated for CommandLineToArgvW arguments.
LocalFree(szArglist);
}
如您所见,我使用CommandLineToArgvW 方法来提取和处理命令行参数。
【讨论】:
GUI 程序可以像命令行程序一样接收命令行参数。
您的应用程序类(CWinApp,如果没有记错的话)包含一个名为 m_lpCmdLine 的成员,该成员在 CString 中包含命令行参数(如果有)。
如果您还想处理 shell 参数,您可能还想查看 WinApp::ParseCommandLine 和 CCommandLineInfo(注意,如果您正在处理向导生成的程序,很可能是 WinApp::ParseCommandLine默认情况下已被调用)。
【讨论】: