getcommandlinea_hookreadfile_getcommandline()(3)

电脑杂谈  发布时间:2017-03-13 03:01:45  来源:网络整理

//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

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...