getcommandlinea_hookreadfile_getcommandline()(2)

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

// dismissed with OK

}

else if (nResponse == IDCANCEL)

{

// TODO: Place code here to handle when the dialog is

// dismissed with Cancel

}

return FALSE;

}

我们要获取程序的命令行参数,一般是在主对话框界面显示之前,即 CProjCleanerDlg dlg; 之前获取。

获取的方法主要是调用 GetCommandLine 和 CommandLineToArgvW 函数。

GetCommandLine 函数的原型定义如下:

LPTSTR WINAPI GetCommandLine(void);

没有参数,返回是一个LPTSTR类型的字符串指针,即命令行参数的字符串。

默认情况下,每个程序都会有一个命令行参数,即可执行程序本身的路径,第二个参数才是真正的附加命令行参数。

举个例子,调用GetCommandLine函数获取到的命令行参数的字符串大致如下:

"E:\SoftWare\ProjCleaner.exe" "-help"

其中,"E:\SoftWare\ProjCleaner.exe" 为可执行文件的路径,"-help" 为附加的参数。

调用完 GetCommandLine 函数获取到了命令行参数之后,

我们就要调用 CommandLineToArgvW 函数去分解得到的命令行参数字符串,

CommandLineToArgvW 函数的原型定义如下:

LPWSTR *CommandLineToArgvW(

LPCWSTR lpCmdLine,

int *pNumArgs

);

他有两个参数,第一个参数 lpCmdLine 即通过 GetCommandLine 函数获取到的命令行参数字符串指针,

第二个参数是一个 int 类型的指针,用这个参数返回命令行参数中的参数个数,

默认情况下,pNumArgs 会返回1,如果有附加的命令行参数,该会大于1,比如:

"E:\SoftWare\ProjCleaner.exe" "-help"

则,pNumArgs 会返回2。

CommandLineToArgvW 函数的返回是一个宽字节LPWSTR类型的字符串指针数组,

数组中的每一个字符串指针代表着一个命令行参数,根据上面的示例,

设返回为:

LPWSTR *lpszArgv,则 lpszArgv[0] 就是 "E:\SoftWare\ProjCleaner.exe",lpszArgv[1] 就是 "-help",这样大家明白了吧?

通过 GetCommandLine、CommandLineToArgvW 两个函数就可以成功的获取并拆分命令行参数了。

MFC也可以像控制台那样获取命令行参数:

利用GetCommandLineW()函数获得命令行参数,

利用CommandLineToArgvW()函数解析命令行参数。

LPWSTR *szArglist = NULL;

int nArgs = 0;

szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);

if( NULL != szArglist)

{

//szArglist就是保存参数的数组


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-37210-2.html

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

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