Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Командная строка


Автор: Berkut 15.2.2005, 18:04
Есть два приложения, первое запускает второе и передает ему некоторые параметры (командная строка). Второе приложение MFC. Подскажите как "вытащить" эти параметры и с ними работать?

Автор: NiJazz 15.2.2005, 22:22
GetCommandLine попробуй.

Автор: IEZ 16.2.2005, 00:14
Вот смотри. К примеру ты передаешь коммандную строку (вернее запускаешь вторую программу)
c:\\Folder\\Proga.exe -help и хочешь обработать ее в программе.
Для этого вставь в свою программу строку, для получения самой коммандной строки.
Код

LPSTR lpCmdLine;
lpCmdLine=::GetCommandLine();

Теперь в переменной lpCmdLine храниться строка: c:\\Folder\\Proga.exe -help.
Для выделения -help и выполнения каких либо действия делаем следующее:
передаем lpCmdLine в ниже указанную функцию.
Код

VOID GetCmdFromCmdLIne(LPSTR lpCmdLine)
{
CHAR *p;

  p=lpCmdLine;
 while(*p)
{
 if(*p=='-')
 {
  p++;
  if(*p=='-help')
   //Вывожу окно хеллпа
  if(*p=='-work')
   //Выполняю какие-либо действия
 }
 p++;
}
}

Ну вот и все. Надеюсь помог. smile

Автор: bel_nikita 16.2.2005, 00:56
А может все же так? MFC все-таки smile
Код

VOID GetCmdFromCmdLIne(CString CmdLine)
{
 if(CmdLine=="-help")
 {
  //Вывожу окно хеллпа
 }
 if(CmdLine=="-work")
 {
  //Выполняю какие-либо действия
 }
}

Автор: IEZ 16.2.2005, 01:09
Цитата(bel_nikita @ 16.2.2005, 00:56)
VOID GetCmdFromCmdLIne(CString CmdLine)
{
if(CmdLine=="-help")
{
  //Вывожу окно хеллпа
}
if(CmdLine=="-work")
{
  //Выполняю какие-либо действия
}
}

А ты попробуй прогони через дебаг.
Удивишься, хоть и мфс. smile

Автор: bel_nikita 16.2.2005, 01:14
А чему удивляться то?

Автор: IEZ 16.2.2005, 01:24
По твоему примеру переделал код:
Код

int iReturn=0;
CString CmdLine;
CmdLine=::GetCommandLine();
if(CmdLine=="-help")
{
iReturn=1;
}
if(CmdLine=="-work")
{
iReturn=2;
}

На выходе iReturn=0; smile
Добавлено @ 01:26
В CmdLine после
Код

CmdLine=::GetCommandLine();

Лежит
Цитата
c:\\Folder\\Proga.exe -help

а не -help.

Добавлено @ 01:27
Соответствено прежде чем сравнивать, нужно разодрать строку. smile

Автор: bel_nikita 16.2.2005, 01:40
Разодрать... не разодрать... Я вообще, про другое хотел сказать.
Но раз уж пошло, то уже все сделано до нас smile
Код

VOID GetCmdFromCmdLIne(CString CmdLine)
{
if(CmdLine.Find("-help") != -1 )
{
 //Вывожу окно хеллпа
}
if(CmdLine.Find("-work") != -1)
{
 //Выполняю какие-либо действия
}
}


З.Ы.:
Цитата
По твоему примеру переделал код
А по твоему примеру, тот который первый, вообще компилить не будет smile

Автор: IEZ 16.2.2005, 01:46
Во теперь другое дело.
Код

CString CmdLine;
CmdLine=::GetCommandLine();
if(CmdLine.Find("-help") != -1)
{
 //Вывожу окно хеллпа
}
if(CmdLine.Find("-work") != -1)
{
 //Выполняю какие-либо действия
}

Теперь его можно отдавать человеку в пользование.
Цитата(bel_nikita @ 16.2.2005, 01:40)
А по твоему примеру, тот который первый, вообще компилить не будет

Тот то вариант для АПИ и на редкость из рабочей проги взят. smile

Автор: NiJazz 16.2.2005, 10:12
Смотри CommandLineToArgvW.

Автор: Berkut 16.2.2005, 15:26
Всем большое спасибо, теперь разобрался smile

Автор: NiJazz 16.2.2005, 17:03
Berkut
как сделал в итоге?

Автор: maxim1000 16.2.2005, 18:08
Цитата
Тот то вариант для АПИ и на редкость из рабочей проги взят

Цитата
if(*p=='-help')

а, если не секрет, как это работает?

Автор: En_t_end 16.2.2005, 18:13
'-help'
Это вообще по-моему ошибка, ' ' - приминимо только к одиночным символам, а к группе символов, коими являются "-help" вообще не катит. Дык чего все правила синтаксиса нафиг ? smile

Автор: IEZ 16.2.2005, 20:19
Цитата(maxim1000 @ 16.2.2005, 18:08)
а, если не секрет, как это работает?

Как часы. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)