翻译文章,原文为《Retrieving command line parameters from WinMain in win32》。
文章关键字 ‘命令行参数’
从Win32程序的主函数WinMain中获取命令行参数
2011年12月23日,星期五GUI程序获取命令行参数
2010年10月13日,星期三在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函数转换一下。