文章关键字 ‘命令行参数’

从Win32程序的主函数WinMain中获取命令行参数

2011年12月23日,星期五

翻译文章,原文为《Retrieving command line parameters from WinMain in win32》。

(更多…)

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函数转换一下。