Форум: "Основная";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
ВнизКоманда DOS (<B>copy</B>, <B>del</B>, ...) без окна? Найти похожие ветки
← →
Влад2 (2002-12-10 16:28) [0]Недавно я задавал подобный вопрос для распаковки архива. Мне хорошо помогли. Но для команд интерпретатора (через command.com) - copy, del и т.п. этот метод не работает.
Что нужно сделать, чтобы:
1. при выполнении ЭТИХ команд окно DOS не показывалось;
2. выполнение задачи не продолжалось, пока не выполнится команда DOS?
Вновь расчитываю на вашу помощь.
Спасибо.
← →
Hooch (2002-12-10 16:53) [1]можно попробовать ShellExecute, если стартовать команду с флагом SW_HIDE, то окна не будет а зная HINSTANCE можно подождать окончания выполнения
← →
Romkin (2002-12-10 16:54) [2]А что, CopyFile, DeleteFile не подходят?
← →
Влад2 (2002-12-10 18:11) [3]Уважаемый Hooch:
>> зная HINSTANCE можно подождать окончания выполнения
А как?
Уважаемый Romkin,
конечно, можно использовать CopyFile, DeleteFile. Но если Вам надо, например, удалить файлов 100, то гораздо быстрее сделать это по маске командой DOS.
Спасибо за ответы.
← →
Smithson (2002-12-10 18:18) [4]WaitSingleObject
← →
Влад2 (2002-12-10 18:27) [5]Уважаемый Smithson,
если Вы имеете ввиду WaitSingleObject() после CreateProcess(), то в ответ на команду DOS del ... CreateProcess() ответит "не могу найти файл" (т.е. "исполняемый файл" del).
А если команду del поместить в файл.bat и запустить его с пом. CreateProcess(), то WaitSingleObject() будет висеть бесконечно долго.
← →
Romkin (2002-12-10 18:38) [6]SHFileOperation прекрасно это сделает, быстро, и без всяких окон (если не захочешь) :-))
← →
Smithson (2002-12-10 18:41) [7]Ну Romkin прав.
А насчет WaitSingleObject, то в бат-файл можно поместить не только команду del, но и команду exit - он и закроется.
← →
Romkin (2002-12-10 18:43) [8]Выдрал из фака :-))
uses ShellAPI;
function DelFile( FileName : string ) : boolean;
var fos : TSHFileOpStruct;
begin
FillChar(fos, SizeOf(fos), 0);
with fos do begin
wFunc := FO_DELETE;
pFrom := PChar( FileName );
fFlags := FOF_NOCONFIRMATION or FOF_SILENT;
end;
Result := (0 = ShFileOperation(fos));
end;
← →
oomneeq (2002-12-10 19:31) [9]>Влад2 (10.12.02 18:27)
>... в ответ на команду DOS del ... CreateProcess() ответит "не могу найти файл" (т.е. "исполняемый файл" del).
В том примере, что я давал, под XP надо в качестве исп. файла
указать
cmd.exe (или command.com для 9X)
a параметром-
/c del file.*
если неочевидно, почитай хелп по ключам коммандного процессора
удачи
← →
Влад2 (2002-12-10 19:42) [10]Спасибо Smithson и Romkin!
Наверное, я переработал :) Про exit совсем забыл. Пользуюсь bat-файлом (он работает для всех команд, включая архивацию).
А про SHFileOperation почти не знал (т.е. основательно забыл)
← →
Влад2 (2002-12-10 20:15) [11]oomneeq,
правильно ли я понимаю, что CreateProcess() будет выглядеть так:
CreateProcess("cmd", "/c del file.*",
nil, nil,
false,
CREATE_NO_WINDOW,
nil,
nil,
StartupInfo,
ProcessInfo)
?
← →
Smithson (2002-12-10 20:17) [12]правильно
← →
Влад2 (2002-12-10 21:16) [13]Большое спасибо всем!
Использую
CreateProcess(nil, "cmd /c del file.*",
nil, nil,
false,
CREATE_NO_WINDOW,
nil,
nil,
StartupInfo,
ProcessInfo)
И маленький вопросик: как узнать, какая операционка (использовать cmd или command.com)?
← →
oomneeq (2002-12-11 01:34) [14]>как узнать, какая операционка (использовать cmd или command.com)?
сусчествует чуева чуча способов, но тебе это не надо :)
тебе ведь надо в конце концов знать что запускать.
(логичное предположение что
9х значит command.com а NT,2K,XP - значит cmd.exe в общем случае может оказаться неправдой)
Вот это поможет тебе правильно определить действующий командный процессор (кто б он ни был):
function GetEnvVar(variable: string) : string;
begin
SetLength(result,MAX_PATH+1);
SetLength(result,GetEnvironmentVariable(pchar(variable),pchar(result),MAX_PATH));
end;
...
WhatToRun:=GetEnvVar("COMSPEC");
...
CreateProcess(WhatToRun .....
а если вдруг интересна теория, читай про переменные окружения ОС
успехов
← →
Rouse_ (2002-12-11 01:51) [15]>как узнать, какая операционка
Есть очень хороший (полный) пример Игоря Шевченко в UBPFD
Есть очень хороший (полный) пример от Microsoft в MSDN
> в ответ на команду DOS del ... CreateProcess() ответит
> "не могу найти файл" (т.е. "исполняемый файл" del).
DOS = MAX, 8 символов+расширение = 12345678.123
Влад2:
По первому и второму вопросу есть полный ответ в FAQ
Желаю успехов
← →
Юрий Зотов (2002-12-11 08:57) [16]> как узнать, какая операционка
А еще есть просто переменная Win32Platform. См. хелп и модуль SysUtils (там же - MajorVersion, MinorVersion).
← →
Влад2 (2002-12-11 11:12) [17]Юрий Зотов:
>> А еще есть просто переменная Win32Platform
Да, действительно, это показалось мне простым и, главное, работает.
Большое спасибо всем откликнувшимся!
Вы мне очень помогли.
Может быть, эта ветка будет полезной и другим.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c