У меня есть приложение 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()
получит исходные параметры командной строки.
У меня вопрос, есть ли способ сбросить параметры командной строки после их обработки?
Спасибо!
Насколько я знаю, нет способа сделать это. Лучше всего сделать копию и всегда проверять эту копию. Эту копию вы можете затем изменить, как вам нравится.
Просто используйте флаг, установите его true
сначала перезагрузите, а затем не проверяйте и не перезапускайте, пока true
,