Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.115 c
3-74554
alxx
2002-12-03 12:43
2002.12.23
Сумма в FreeReport (FastReport).


1-74753
VJar
2002-12-05 17:35
2002.12.23
Изменение своей же иконки


3-74617
TVV
2002-12-05 13:02
2002.12.23
Blob поля через IBQuery запрос


1-74817
RusIv
2002-12-11 18:24
2002.12.23
Как изменить цвет кнопки(TButton)?


1-74800
Сергей
2002-12-11 14:18
2002.12.23
пример программного добавления папки и программ в меню Start->Pro





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский