createpipeprocess - запускает процесс и создает Pipe канал.
Функция может вызываться с разным количеством параметров.
Короткая:
CODE:
createpipeprocess("C:\Windows\System32\cmd.exe -i");
В виде параметра принимает командную строку пути к программе.
Длинная:
CODE:
createpipeprocess("C:\Windows\System32\cmd.exe -i", STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES, SW_HIDE);
Первый параметр - принимает командную строку пути к программе.
Второй - dwFlags структуры STARTUPINFO. В случае короткой функции этот параметр по умолчанию STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES
Третий - wShowWindow структуры STARTUPINFO. В случае короткой функции этот параметр по умолчанию SW_HIDE
Функция возвращает 1 при успехе.
-1 если канал не создан.
0 если не удалось запустить процесс.
======================================
sendpipe - отправляет данные процессу по Pipe
CODE:
sendpipe("dir^n");//Отправить dir и ентер
В виде параметра принимает строку.
Функция возвращает 1 при успехе.
======================================
waitpipe - ожидает пока в канале не появятся данные для чтения.
Функция выходит из ожидания при появление первых данных. Не ожидает окончания когда все данные будут готовы для чтения.
CODE:
waitpipe();
Возвращает количество байт готовых для чтения. Может отличаться от количества которые можно будут прочитать по окончанию обработки введенной команды процессом.
======================================
getpipe - считывает данные с Pipe канала.
Функция может вызываться с разными параметрами.
1)
Параметр - указатель на string в который запишутся читаемые данные
CODE:
string S;
int C=getpipe(#S);
int C=getpipe(#S);
2)
Параметр - указатель на массив char в который запишутся читаемые данные
CODE:
char G[1000000];
int C=getpipe(#G[0]);
int C=getpipe(#G[0]);
Надо объявлять массив на 1 больше чем ожидаемые данные. Последний элемент заполнится 0
3)
Параметр первый - указатель на массив char в который запишутся читаемые данные
Второй - количество читаемых байт. Остальные останутся несчитанными.
CODE:
char G[11];
int C=getpipe(#G[0], 10);
int C=getpipe(#G[0], 10);
Надо объявлять массив на 1 больше чем ожидаемые данные. Последний элемент заполнится 0
Функция возвращает количество считанных в этом вызове байт.
-1 при ошибке.
Если количество считанных байт равно 0, это означает что все байты считанные уже или процесс еще не успел выдать данные и надо немного подождать что бы считать.
======================================
closepipeprocess - завершает процесс и закрывает канал.
CODE:
closepipeprocess();
Примеры:
Правильное чтение ВСЕГО ответа
CODE:
if (createpipeprocess("C:\Windows\System32\cmd.exe -i"))
{
sendpipe("chcp 1251^n");//Устанавливаем кодировку windows 1251 для русс шрифта
sendpipe("dir^n");//Отправляем команду dir
waitpipe();//Ждем пока отработает и появятся данные
sleep(500);//для надежности
string rez="";
char G[9999999];
while (getpipe(#G[0], size(#G[0]))) rez=rez+format(#G[0]);//Считываем весь ответ пока он идет
messagebox (rez);
closepipeprocess();//Завершим процесс и закрываем канал
}
{
sendpipe("chcp 1251^n");//Устанавливаем кодировку windows 1251 для русс шрифта
sendpipe("dir^n");//Отправляем команду dir
waitpipe();//Ждем пока отработает и появятся данные
sleep(500);//для надежности
string rez="";
char G[9999999];
while (getpipe(#G[0], size(#G[0]))) rez=rez+format(#G[0]);//Считываем весь ответ пока он идет
messagebox (rez);
closepipeprocess();//Завершим процесс и закрываем канал
}
CODE:
if (createpipeprocess("C:\Windows\System32\cmd.exe -i"))
{
sendpipe("chcp 1251^n");//Устанавливаем кодировку windows 1251 для русс шрифта
sendpipe("dir^n");//Отправляем команду dir
waitpipe();//Ждем пока отработает и появятся данные
sleep(500);//для надежности
int C;
string S;
C=getpipe(#S);//Читаем
messagebox (C);
messagebox (S);
closepipeprocess();//Завершим процесс и закрываем канал
}
{
sendpipe("chcp 1251^n");//Устанавливаем кодировку windows 1251 для русс шрифта
sendpipe("dir^n");//Отправляем команду dir
waitpipe();//Ждем пока отработает и появятся данные
sleep(500);//для надежности
int C;
string S;
C=getpipe(#S);//Читаем
messagebox (C);
messagebox (S);
closepipeprocess();//Завершим процесс и закрываем канал
}
===========
CODE:
if (createpipeprocess("C:\Windows\System32\cmd.exe -i"))
{
sendpipe("chcp 1251^n");//Устанавливаем кодировку windows 1251 для русс шрифта
sendpipe("dir^n");//Отправляем команду dir
waitpipe();
char G[1000000];
int C;
int n=0;
A: looptime(3000)//Считываем в течение 3 секунд
{
C=getpipe(#G[n]);
n=n+C;
if (C!=0) goto A;
}
C=n;
messagebox (C);
messagebox (format(#G[0]));
closepipeprocess();//Завершим процесс и закрываем канал
}
{
sendpipe("chcp 1251^n");//Устанавливаем кодировку windows 1251 для русс шрифта
sendpipe("dir^n");//Отправляем команду dir
waitpipe();
char G[1000000];
int C;
int n=0;
A: looptime(3000)//Считываем в течение 3 секунд
{
C=getpipe(#G[n]);
n=n+C;
if (C!=0) goto A;
}
C=n;
messagebox (C);
messagebox (format(#G[0]));
closepipeprocess();//Завершим процесс и закрываем канал
}
===========
CODE:
if (createpipeprocess("C:\Windows\System32\cmd.exe -i"))
{
sendpipe("chcp 1251^n");//Устанавливаем кодировку windows 1251 для русс шрифта
sendpipe("dir^n");//Отправляем команду dir
waitpipe();
char G[11];
int C=getpipe(#G[0], 10);
messagebox (C);
messagebox (format(#G[0]));
closepipeprocess();//Завершим процесс и закрываем канал
}
{
sendpipe("chcp 1251^n");//Устанавливаем кодировку windows 1251 для русс шрифта
sendpipe("dir^n");//Отправляем команду dir
waitpipe();
char G[11];
int C=getpipe(#G[0], 10);
messagebox (C);
messagebox (format(#G[0]));
closepipeprocess();//Завершим процесс и закрываем канал
}