【问题标题】:passing command line string lpszCmdLine to WM_CREATE in c将命令行字符串 lpszCmdLine 传递给 c 中的 WM_CREATE
【发布时间】:2023-03-04 19:44:01
【问题描述】:

我有一个使用 c 语言编写的 win32 应用程序。 我已经实现了命令行参数的使用,这些参数被捕获到 WinMain() 函数的 lpszCmdLine 参数中。 这个参数可以在这个函数中访问,WinMain是我当前处理命令行的地方。 (使用各种命令行参数设置我的各种变量)。 但我希望我可以在回调函数的 WM_CREATE 案例中处理我的命令行参数。现在,有些事情会在 WM_CREATE 中发生,我希望它们根据我的命令行参数以不同的方式发生。

是否可以将特定字符串传递给回调函数?

【问题讨论】:

    标签: c++ c winapi winmain


    【解决方案1】:

    您可以从进程内的任何位置访问命令行,调用GetCommandLine。如果您希望使用argc/argv 的形式,可以调用CommandLineToArgvW,并拆分命令行。

    使用 Visual Studio 附带的 CRT 时,可以使用 __argc, __argv, __wargv 从任何地方访问拆分的命令行参数。请注意,仅填充__argv__wargv 之一,具体取决于编译CRT 入口点时是否定义了预处理器符号_UNICODE

    【讨论】:

      【解决方案2】:
      1. 你可以通过调用GetCommandLinewinapi函数从任何地方访问命令行。

      2. 或者,您可以保存传入的 WinMain 参数,然后将其作为参数(最后一个参数,lParam)传递给 CreateWindow() 函数,然后作为 CREATESTRUCT.lpCreateParams 从 WM_CREATE 处理程序中访问它

      3. 或者,您可以将其保存在某个全局变量中,然后从任何地方访问它。

      【讨论】:

      • 我想我喜欢 3. 的简单性。最好的 - 谢谢!
      • @a1s2d3f4,您已经有了一个有效的全局变量 - GetCommandLine 函数。
      • @chris,除了我知道 GetCommandLine 返回应用程序的完整路径,然后是命令,而我已经有一个解析函数,它不希望这条路径 powerbasic.com/support/help/pbcc/winmain_function.htm
      猜你喜欢
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多