【问题标题】:how to pass argv parameters in GUI program c++, not console? [duplicate]如何在 GUI 程序 C++ 中传递 argv 参数,而不是控制台? [复制]
【发布时间】:2017-10-10 03:28:30
【问题描述】:

伙计们。

我想在我用c++编写的GUI程序中传递argv参数,我的程序不是黑屏控制台,而是一个GUI。 例如我的程序是 AAA.exe,我想传递一个命令,如“AAA.exe doThing”等。我该怎么做?非常感谢大家。

【问题讨论】:

标签: c++ user-interface winapi


【解决方案1】:

虽然WinMain 是应用程序入口点,但它对命令行参数的帮助不大。

(您可以使用GetCommandLine()从任何地方获取命令行。)

你可以使用CommandLineToArgvW()解析它。

【讨论】:

  • 谢谢,我明白了,并想出了以下答案。我已经测试过了,像箭头一样工作......
【解决方案2】:

如果你使用VS,你可以很容易地使用__argc and __argv

这些变量由 CRT 自动填充。这些变量在 MBCS/ANSI 版本和 Unicode 版本中可用。 __argv 是 MBCS/ANSI 版本,而 __wargv 是 unicode 版本。

要使用它们,我们只需包含 stdlib.h。包含 TCHAR.h 时,还有一个 __targv 版本。

【讨论】:

  • 没有 ASCII 版本。有一个 ANSI 版本,很强大。
  • 你是对的!我更正了我的答案。
  • 你还有“argv是ascii版本”。
  • 又改了!
  • "__arcg" 是一个错字。当然应该是 __argc。
【解决方案3】:

想出了以下答案,它已经过测试并且像箭头一样工作得很好。 将此代码添加到 WinMain 块中。

LPWSTR *szArgList;
int argCount;

 szArgList = CommandLineToArgvW((LPWSTR)GetCommandLine(), &argCount);
 if (szArgList == NULL){
     MessageBox(NULL, "Unable to parse command line", "Error", MB_OK);
     return 10;
 }
 int wint = 1;
 for(int i = 0; i < argCount; i++){
    cout << "szArgList[i]: " << (LPSTR)szArgList[i] << endl;
    string argsbek= (LPSTR)szArgList[i];
    if (argsbek.find(" passMyword") != string::npos){
       cout <<"words are passed ..."<<endl;
       wint=2;
    }
 }
 LocalFree(szArgList);

【讨论】:

  • 强制转换肯定会使编译器静音。但是一旦你运行程序,你会发现它失败了。使用GetCommandLineW()wcout,并删除演员表。您可能还应该删除所有不相关的代码。
  • 不,这段代码不好。
  • 太好了,非常感谢。
猜你喜欢
  • 1970-01-01
  • 2011-05-03
  • 2019-10-13
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
  • 2013-11-05
  • 2012-05-08
相关资源
最近更新 更多