Что я должен сделать, чтобы получить новый процесс, используя новое окно командной строки? - PullRequest
1 голос
/ 25 августа 2010

У меня есть два консольных приложения, первое из которых запускает второе:

1_первое консольное приложение:

#include <Tchar.h>
#include <windows.h>
#include <iostream>
using namespace std;

void main(){
 PROCESS_INFORMATION obj1;
 memset(&obj1,0,sizeof(PROCESS_INFORMATION));
 STARTUPINFOW obj2;
 memset(&obj2,0,sizeof(STARTUPINFOW));
 obj2.cb=sizeof(STARTUPINFOW);
 CreateProcessW(_TEXT("c:\\runme.exe"),_TEXT("hello what's up?"),NULL,NULL,FALSE,NULL,NULL,NULL,&obj2,&obj1);
}

2_секундное консольное приложение с именем runme.exe:

#include <stdio.h>
#include <iostream>
using namespace std;

int main(int argc,char * * argv){
 if (argc>0)
  for (int i=0;i<argc;i++)
   cout <<"**->**"<<argv[i]<<"\n";
}

Теперь моя проблема в том, что оба приложения будут использовать одно и то же окно командной строки, что мне делать, чтобы получить их, используя отдельные?

1 Ответ

3 голосов
/ 25 августа 2010

Передайте CREATE_NEW_CONSOLE во флаги создания процесса (шестой параметр) при вызове CreateProcess.

CreateProcessW(L"c:\\runme.exe",L"hello what's up?",NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&obj2,&obj1);

Когда вы звоните CreateProcessW, вы не хотите использовать _TEXT для строк. CreateProcessW всегда принимает широкие строки, поэтому вы всегда должны использовать префикс L для них. _TEXT (или _T) - это только для использования с CreateProcess (без суффикса), поэтому он может меняться от узких к широким строкам в зависимости от того, определите ли вы UNICODE / _UNICODE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...