【问题标题】:c++, windows - reset command line parameters after handling themc++, windows - 处理后重置命令行参数
【发布时间】:2013-02-18 05:51:10
【问题描述】:

我有一个 Win32 应用程序,它有一个对话框,仅当进程是重新启动的进程时才会执行某些操作。大纲如下:

#define CMDLINE_RESTART_PROCESS "--Restart"

BOOL CheckForProcessRestart()
{
    LPTSTR szCmdLine = ::GetCommandLine()
    return ::StrStr(szCmdLine, CMDLINE_RESTART_PROCESS) != NULL;
}

BOOL CMyDialog::InitInstance()
{
    if(CheckForProcessRestart())
    {
        // Do something (like initialize certain variables, controls, etc)
    }
    // Rest of application
}

在我检测到进程是一个重新启动的进程并初始化这些控件和变量后,我的对话框将执行它​​的操作并关闭。

此对话框可通过主窗口中的菜单访问。点击那个菜单按钮,当这个对话框弹出时,它会再次检测到它是一个重新启动的进程,因为GetCommandLine()会得到原来的命令行参数。

我的问题是,有什么方法可以在我处理完命令行参数后重置它们?

谢谢!

【问题讨论】:

  • 等等,您是否使用命令行参数从另一个程序集打开对话框?还是在主窗口和对话框之间共享命令行参数?如果是第一个,那么你不需要重置你的参数,如果是第二个,那么你不应该使用命令行参数。虽然我觉得我可能误解了你的问题。
  • @Antonijn,没有。我有一个应用程序可以执行某些操作,然后自行重新启动。重新启动后,这个对话框应该做一些特殊的事情。就是这样。

标签: c++ windows mfc command-line-arguments


【解决方案1】:

据我所知,没有办法做到这一点。您最好的选择是制作一份副本并始终检查该副本。然后您可以根据需要修改该副本。

【讨论】:

  • 感谢您的回答!老实说,我认为应该有一种方法可以让调用进程能够设置/重置自己的命令行参数,而无需克隆自身并退出。
  • 我认为这种行为是完全合理的,因为数据来自外部。你无法回到过去并改变你被召唤的方式,那么系统为什么要让你表现得好像你可以一样呢?
  • 从这个角度来看是有道理的。但我在想,因为每个命令行只与那个进程相关,而且只有那个进程知道如何处理这些参数,它应该能够通过一些限制来修改它们。不过只是我的拙见。
  • 无论如何,我就是这样做的。感谢您的回答!
【解决方案2】:

只需使用一个标志,在第一次重新启动时将其设置为true,然后在true 时不要检查并重新启动。

【讨论】:

  • 感谢您的回答!我宁愿不使用额外的变量。我只是想知道是否有办法真正重置调用进程的命令行参数。
猜你喜欢
  • 2013-05-08
  • 2021-02-13
  • 1970-01-01
  • 2023-04-03
  • 2015-05-01
  • 1970-01-01
  • 2011-10-27
  • 2018-12-15
相关资源
最近更新 更多