Window中获得命令行参数的方法和通用的命令行分析方法

 

Window中获得命令行参数的方法和通用的命令行分析方法

 

MFC中获取命令行参数的几种方法 在MFC程序中,可以用以下几种方法来获取命令行参数。

为方便说明,我们假设执行了命令:C:/test/app.exe -1 -2

 

方法一

::GetCommandLine();

将获取到 "C:/test/app.exe"  -1 -2

 

方法二

for (int i=0;i<__argc;i++)

{

__argv[i];

将依次得到C:/test/app.exe  -1  -2

}

 

方法三

AfxGetApp()->m_lpCmdLine;

将获取到 -1 -2

 

其他方法

如果希望支持MFC应用程序的标准命令行,还可以使用MFC中的CCommandLineInfo类。

 

 

 // 要注意的地方是在UNICODE编码中 要使用__wargv 而不是 __argv

 

// 命令行的分析方法

struct Info{

     unsigned long nID;

     char cName[30];

     char cPWD[16];

     char cEMail[28];

     char cPhone[16];

     char cMPhone[16];

     char cArea[50];

};

// 输入的命令行是

// TryArgv.exe -d 123 -n 帅哥男   -p 123    -e abcd@163.com      -h 7099999      -m 245658       -a 中国

bool CTryArgvDlg::ArgvYes(Info& userInfo)

{

     bool bHaveID = false;

     bool bHaveName = false;

     int i;

     if (__argc > 1)

     {

         for(i = 1; i < __argc; ++i)

         {

              if ((__argv[i][0] == '-') || (__argv[i][0] == '/'))

              {

                   switch(tolower(__argv[i][1]))

                   {

                   case 'd': // nID

                       userInfo.nID = atol(__argv[++i]);

                       bHaveID = true;

                       break;

                   case 'n': // cName

                       if(sizeof(userInfo.cName) <= strlen(__argv[i + 1]))

                       {

                            __argv[i + 1][sizeof(userInfo.cName)] = 0;

                       }

                       strcpy(userInfo.cName, __argv[++i]);

                       bHaveName = true;

                       break;

                   case 'p': // cPWD

                       if(sizeof(userInfo.cPWD) <= strlen(__argv[i + 1]))

                       {

                            __argv[i + 1][sizeof(userInfo.cPWD)] = 0;

                       }

                       strcpy(userInfo.cPWD, __argv[++i]);

                       break;

                   case 'e': // cEMail

                       if(sizeof(userInfo.cEMail) <= strlen(__argv[i + 1]))

                       {

                            __argv[i + 1][sizeof(userInfo.cEMail)] = 0;

                       }

                       strcpy(userInfo.cEMail, __argv[i + 1]);

                       break;

                   case 'h': // cPhone

                       if(sizeof(userInfo.cPhone) <= strlen(__argv[i + 1]))

                       {

                            __argv[i + 1][sizeof(userInfo.cPhone)] = 0;

                       }

                       strcpy(userInfo.cPhone, __argv[i + 1]);

                       break;

                   case 'm': // cMPhone

                       if(sizeof(userInfo.cMPhone) <= strlen(__argv[i + 1]))

                       {

                            __argv[i + 1][sizeof(userInfo.cMPhone)] = 0;

                       }

                       strcpy(userInfo.cMPhone, __argv[i + 1]);

                       break;

                   case 'a': // cArea

                       if(sizeof(userInfo.cArea) <= strlen(__argv[i + 1]))

                       {

                            __argv[i + 1][sizeof(userInfo.cArea)] = 0;

                       }

                       strcpy(userInfo.cArea, __argv[++i]);

                       break;

                   default:

                       break;

                   }

              }

         }

     }

     if(bHaveID && bHaveName)

     {

         return true;

     }

     return false;

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值