在Console程序中可以用main函数中的argc和argv遍历命令行参数。
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
for(i = 0;i < argc;i++)
printf("%s\n", argv[i]);
return 0;
}
那么在GUI程序中怎么遍历命令行参数呢?虽然WinMain函数的lpCmdLine参数中传入了程序的命令行参数,但是该参数不包含应用程序名(即main函数中的argv[0]),而且自己解析出每个参数也比较麻烦。
最简单的方法是先用GetCommandLineW函数获取命令行,然后用CommandLineToArgvW函数将命令行转化成C语言main函数argc和argv的形式。
#include <windows.h>
#include <stdio.h>
#include <shellapi.h>
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
LPWSTR *szArglist;
int nArgs, i;
szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
for (i = 0; i < nArgs; i++)
{
MessageBoxW(NULL, szArglist[i], L"", 0);
}
return 0;
}
只可惜没有CommandLineToArgvA函数,想用ANSI版的话得自己用WideCharToMultiByte函数转换一下。