2011-07-13 3 views
0

Я использую визуальную студию 2008 и MFC. Я принимаю аргументы, используя подкласс CCommandLineInfo и переопределяя ParseParam().Приложение для принятия аргументов во время работы

Теперь я хочу передать эти аргументы приложению во время работы. Например, «test.exe/start», а затем снова введите команду «test.exe/initialize» в консоли.

есть ли способ сделать это?

Редактировать 1: Некоторые разъяснения. Моя программа начинается с «test.exe/start». Я хочу напечатать «test.exe/initialize» и инициализировать только один процесс (без закрытия/открытия). И при инициализации я хочу прочитать другой XML-файл, чтобы изменить некоторые значения интерфейса и другие вещи.

+0

Возможно, программа запускает новый процесс сама по себе и завершает работу старой, когда получает «test.exe/initialize»? Не знаю много о том, что вы можете делать с приложениями MFC. Альтернативно, вместо того, чтобы действительно «повторно инициализировать», вы могли бы взять все глобальные переменные, с которых вы начали, установить их в свои исходные значения и вернуться к началу 'main()'. – JAB

+0

Это хорошая идея, но я хочу это сделать, потому что мое приложение запускает какой-то кусок машины, для чего требуется некоторое время для инициализации. Поэтому я не хочу прерывать процесс, просто чтобы его снова инициализировать. – Chrys

+0

Итак, можете ли вы сохранить начальное состояние всех переменных в приложении при его запуске и вернуть их в это начальное состояние при отправке «initialize»? – JAB

ответ

0

Первый и очевидный вопрос - почему вы хотите иметь потоки, а не процессы.

Вы можете использовать GetCommandLine и CommandLineToArgvW, чтобы получить полностью отформатированную командную строку. Обнаружение аргументов и вызов CreateProcess или ShellExecute Передача/watever для запуска процесса. Вы также можете использовать GetModuleBaseName, чтобы получить имя своего собственного EXE.

+0

Кто сказал что-нибудь о потоках? Проблема в том, что я хочу передать аргументы текущему процессу. – Chrys

+0

Передайте аргументы процессу RUNNING? Вам нужно использовать один из механизмов IPC: Pipes, mail-slots, shared-memory или функцию Windows SendMessage/PostMessage и т. Д. – Ajay

+0

Ваш вопрос нечеткий - вам нужно запустить несколько процессов или нет? – Ajay

1

Я не могу придумать простой способ выполнить то, о чем вы просите.

Однако вы могли бы разработать приложение для получения конкретных команд и при условии, что эти команды предпримут любые действия, которые вы хотели, на основе их получения. Поскольку вы уже используете MFC, вы можете сделать это довольно легко. Создайте окно (HWND) для своего приложения и зарегистрируйте его. Он не должен быть видимым (это не обязательно сделает приложение графическим приложением). Внесите WndProc и определите конкретные сообщения, которые вы получите на основе WM_USER + <xxx>.

Смежные вопросы