Fork me on GitHub

Win32程序支持命令行参数的做法

转载自:http://blog.csdn.net/clever101/article/details/16808705

 

首先说说Win 32 API程序如何支持命令行参数。Win 32程序的入口函数为: 

1
2
3
4
int APIENTRY _tWinMain(HINSTANCE hInstance, 
                     HINSTANCE hPrevInstance, 
                     LPTSTR    lpCmdLine, 
                     int       nCmdShow)

其中lpCmdLine为命令行参数,所以只需把它解析出来即可。

  比如一个win32程序为a.exe,它的命令行用法如下:

    a.exe 文件1 文件2

那么可以这样解析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int APIENTRY _tWinMain(HINSTANCE hInstance, 
                     HINSTANCE hPrevInstance, 
                     LPTSTR    lpCmdLine, 
                     int       nCmdShow) 
    
    int argc = 0; 
    LPWSTR *lpszArgv = NULL; 
//分割命令行参数 
    lpszArgv = CommandLineToArgvW(lpCmdLine, &argc); 
    if (argc >= 2) 
    
        if(::GetFileAttributes(lpszArgv[0])==-1) 
        
            //文件1不存在 
            ::MessageBox(GetDesktopWindow(),lpszArgv[1],_T("提示"), MB_OK|MB_ICONINFORMATION); 
            return 1; 
        
       
        if(::GetFileAttributes(lpszArgv[1])==-1) 
        
            //文件2不存在 
            ::MessageBox(GetDesktopWindow(),lpszArgv[2],_T("提示"), MB_OK|MB_ICONINFORMATION); 
            return 1; 
        

 

如果是一个MFC程序,做法比Win 32 API程序多一步,就是获取命令行字符串。具体如下:

1
2
3
4
5
6
7
8
BOOL CXxxAppApp::InitInstance() 
   LPTSTR pszCmdLine = GetCommandLine(); //获取命令行参数; 
    LPWSTR *lpszArgv = NULL; 
    int argc = 0; 
    lpszArgv = CommandLineToArgvW(pszCmdLine,&argc); //拆分命令行参数字符串 
// 下面的处理和win32 api程序一样, 

有四点需要注意:

1. Win 32 API程序的命令行lpCmdLine是只包含参数,而MFC程序的命令行第一个参数是exe本身。

 

2.  GetCommandLine获取的是一个unicode字符串,CommandLineToArgvW也只能处理unicode字符串,如果你的程序选择的是多字节字符集,需要进行处理。

 

3.  CommandLineToArgvW是按空格来拆分参数的,如果从参数是文件路径,就不要用CommandLineToArgvW了,因为文件路径本身可能带有空格,可以用正则表达式来解析。

 

4.  命令行的调试可以这样设置:

 

posted @   江湖码客Mark  阅读(500)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示