![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как убить процесс сеанса дос. [D5, Win95/98]
Chup © (2001-12-03 16:16:00)Я выполняю *.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;
Остается черное окно , как его убить?
Anatoly Podgoretsky (2001-12-09 16:15:00) [1]Этого не достаточно, надо что бы не только последней, но еще и не законченой
Кто-тто (2001-12-09 01:52:00) [2]2 бывший NA
Не пробовал bat через CreateProcess, но при запуске bat обычными средствами Windows, именно закрывается окно ДОСа, если поставить cls.
N_A (2001-12-08 23:09:00) [3]Кстати говоря, вся эта шняга зависит от того, как настроены конкретные command.pif и default.pif в конкретной системе.
Может статься, что останется висеть все то же черное окно с заголовком "(Сеанс завершён) - Сеанс MS-DOS", и никакой /C тут не поможет.
Кто-то: если поставить cls, то окно само очистится от изображения.
Mick: Точно. Мы оба хотели это сказать, но как-то забыли :)
AlexKniga (2001-12-06 17:22:00) [4]CmdLine:="Start wer.bat"
Mick (2001-12-06 09:24:00) [5]to NA
Я хотел сказать:
"Command.com /C <имя_запускаемого_дос_приложения>"
Кто-то (2001-12-06 03:49:00) [6]Где-то читал, что если последней строчкой в bat-е поставить cls, то окно само закроется.
NA (2001-12-06 00:04:00) [7]"Command.com <имя_запускемого_дос_приложения> /C" - ты хотел сказать, наверное?
P. S. А ввобще можно пойти маразматическим путем - убить окно, найдя его по заголовку :D
Mick (2001-12-05 16:14:00) [8]Если CmdLine будет такого вида:
"Command.com <имя_запускемого_дос_приложения>",
то окно закроется само
Holms (2001-12-04 22:58:00) [9]Вообще никаких окон
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);