#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
PROCESS_INFORMATION pinf;
STARTUPINFO SI;//Нужно для запуска новых процессов
double m[3],d[3];
char WDir[500],CDir[500],comm[500];
int main()
{
AllocConsole();//Чтоб консоль появилась
GetWindowsDirectoryA(LPSTR(WDir),500);//Где у нас директория с WINDOWS
GetCurrentDirectoryA(500,LPSTR(CDir));//Текущая директория
//comm:=PChar(@wdir)+'\COMMAND.com /C '+comm;
strcpy(comm,WDir);
strcat(comm,"\\System32\\cmd.exe");//Командная строка(сеанс MS-DOS)
ZeroMemory(&SI,sizeof(SI));//Обнуляем память
SI.cb=sizeof(SI);//Размер структуры
SI.dwFlags=STARTF_RUNFULLSCREEN;
if (CreateProcessA(LPSTR(comm),NULL,NULL,NULL,false,CREATE_NEW_CONSOLE||DETACHED_PROCESS || NORMAL_PRIORITY_CLASS || CREATE_DEFAULT_ERROR_MODE,NULL,LPSTR(CDir),LPSTARTUPINFOA(&SI),&pinf)==0)
cout<<"Error!\n";
cin.get();
FreeConsole();//Закрываем консоль
return 0;
}
Как запустить дочрний процесс.
Пытаюсь запустить программано cmd.exe. Просто появляется окно, и закрывается, а должон появиться command prompt. Делаю так:
Код:
CreateProcessA(LPSTR(comm),NULL,NULL,NULL,false,CREATE_NEW_CONSOLE||DETACHED_PROCESS || NORMAL_PRIORITY_CLASS || CREATE_DEFAULT_ERROR_MODE,NULL,LPSTR(CDir),LPSTARTUPINFOA(&SI),&pinf)
[/QUOTE]
1. В маске стоит побитовое ИЛИ, то бишь одна вертикальная черта, а не двойная, как у вас.
2. [QUOTE=MSDN]
CREATE_NEW_CONSOLE cannot be used with DETACHED_PROCESS.
[/QUOTE]
Соответственно, один из этих флагов лишний.
3. А почему проблему нельзя решить банально через ShellExecute()? Для чего понадобился CreateProcess()?
Код:
CreateProcessA("C:\\WINDOWS\\System32\\cmd.exe",NULL,NULL,NULL,0,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi)