MFC - расширить приложение для запуска из командной строки - PullRequest
1 голос
/ 15 ноября 2010

У меня есть приложение MFC, которое я пытаюсь расширить для принятия параметров командной строки и запуска без присмотра.

Мне нужно запустить некоторые события после , когда InitInstance () завершился и существующий графический интерфейс был полностью загружен.Я посмотрел на winmain.cpp, но мне не ясно, как запустить мои события, так как кажется, что они запускают поток и «исчезают» из отладчика (то есть, что будет выполнено дальше?Можно ли туда зацепиться?) Я новичок в этом, и вполне возможно, что мне не хватает чего-то проницательного на более высоком уровне, который не так легко найти.Благодарен за указатели.

Спасибо.

Ответы [ 3 ]

1 голос
/ 15 ноября 2010

Я бы проанализировал командную строку в InitInstance, как обычно, но вместо немедленной обработки всех найденных команд, добавьте некоторую специальную обработку для тех, которые вас волнуют (например), отправлять сообщения обратно в ваше собственное сообщение.в очереди, поэтому, когда вы будете готовы начать обработку сообщений, они будут отображаться в качестве первого шага.

Для этого я бы , вероятно, извлек класс из CComandLineInfo и переопределите ParseParam для обработки команд, которые вам нужны (и отправьте любые другие аргументы, которые он не распознает, обратно в CComandLineInfo::ParseParam для обычной обработки).Затем в InitInstance замените этот бит кода:

// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);

На тот, который использует ваш собственный анализатор командной строки:

MyCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);

ParseCommandLine будет затем вызывать ваш ParseParam для каждогопараметр в командной строке, дающий вам первый шанс решить, что это значит и как его обработать.Вы, вероятно, захотите посмотреть «стандартные» команды, которые CComandLineInfo уже понимает, и оставить их в покое, если вам действительно не нужно их менять.

1 голос
/ 15 ноября 2010

Самый простой способ перехватить параметры командной строки - обратиться к глобальным переменным __targv (определенным как LPCTSTR* __targv или что-то подобное) и __argc (определенным как int).

Например:

for(int i = 0; i < __argc; ++i) {
    DoSomethingWithArg(__targv[i]);
}

В основном, как и любое другое консольное приложение.

0 голосов
/ 15 ноября 2010

вы можете перегрузить PreTranslateMessage и пропустить там сообщения

...