Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];




Вниз

Как убить процесс сеанса дос. 


Chup   (2001-12-03 16:16) [0]

Я выполняю *.bat файл с помощью
procedure TForm1.Button1Click(Sender: TObject);
var si:STARTUPINFO;
pi:PROCESS_INFORMATION;
cmdline:string;
begin ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
cmdline:="wer.bat";
if not CreateProcess( nil,
PChar(cmdline),
nil,
nil,
False,
0,
nil,
nil,
si,
pi )
then
begin
ShowMessage( "CreateProcess failed." );
Exit;
end;
WaitforSingleObject(Pi.hProcess,INFINITE);
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

end;

Остается черное окно , как его убить?



Holms   (2001-12-04 22:58) [1]

Вообще никаких окон

String fScript = ExtractFilePath(ParamStr(0)) + "temp.sam";
Memo1->Lines->SaveToFile(fScript);
String filename = ExtractFilePath(ParamStr(0)) + "samx.exe";
String fArg = fScript;

SECURITY_ATTRIBUTES sa;
ZeroMemory(&sa, sizeof(sa));
sa.nLength = sizeof(sa);
sa.bInheritHandle = true;

HANDLE hRead, hWrite;
if(!CreatePipe(&hRead, &hWrite, &sa, 0)){
ShowMessage("Cannot create pipe");
return;
}

STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(si));
si.hStdOutput = hWrite;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USECOUNTCHARS | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.dwXCountChars = si.dwYCountChars = 1;

filename += " temp.sam " + Edit1->Text;
CreateProcess(
NULL, // шыш ы?ср фЁєур яЁюуЁрььр
filename.c_str(),
NULL,
NULL,
TRUE,
0,
NULL,
NULL,
&si,
&pi);

CloseHandle(hWrite);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);

String rez;
char temp[255];
DWORD dwBytesRead;
while(1){
memset(temp, 0, 255);
if(!ReadFile(hRead, temp, 255, &dwBytesRead, NULL) || !dwBytesRead)
break;
rez += temp;
}

// ShowMessage(rez);
Memo2->Lines->Add(rez);



Mick   (2001-12-05 16:14) [2]

Если CmdLine будет такого вида:
"Command.com <имя_запускемого_дос_приложения>",
то окно закроется само



NA   (2001-12-06 00:04) [3]

"Command.com <имя_запускемого_дос_приложения> /C" - ты хотел сказать, наверное?

P. S. А ввобще можно пойти маразматическим путем - убить окно, найдя его по заголовку :D



Кто-то   (2001-12-06 03:49) [4]

Где-то читал, что если последней строчкой в bat-е поставить cls, то окно само закроется.



Mick   (2001-12-06 09:24) [5]

to NA
Я хотел сказать:
"Command.com /C <имя_запускаемого_дос_приложения>"



AlexKniga   (2001-12-06 17:22) [6]

CmdLine:="Start wer.bat"



N_A   (2001-12-08 23:09) [7]

Кстати говоря, вся эта шняга зависит от того, как настроены конкретные command.pif и default.pif в конкретной системе.

Может статься, что останется висеть все то же черное окно с заголовком "(Сеанс завершён) - Сеанс MS-DOS", и никакой /C тут не поможет.

Кто-то: если поставить cls, то окно само очистится от изображения.
Mick: Точно. Мы оба хотели это сказать, но как-то забыли :)



Кто-тто   (2001-12-09 01:52) [8]

2 бывший NA
Не пробовал bat через CreateProcess, но при запуске bat обычными средствами Windows, именно закрывается окно ДОСа, если поставить cls.



Anatoly Podgoretsky   (2001-12-09 16:15) [9]

Этого не достаточно, надо что бы не только последней, но еще и не законченой




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.022 c
14-9001           Awex                  2001-12-10 16:07  2002.02.04  
Какое пиво лучше ?


3-8755            Юрий Жуков            2002-01-04 18:00  2002.02.04  
Oracle + DOA. Не могу остановить TOracleEvent


1-8899            Velocity              2002-01-15 12:28  2002.02.04  
Потоки и динамическое выделение памяти


3-8804            Potemkin              2002-01-03 09:55  2002.02.04  
Вопрос


1-8834            Ajax                  2002-01-15 09:31  2002.02.04  
Изменение свойств KOL формы