Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2010, 17:47   #11
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Только, что попробывал на примере:
md NewFolder
copy WinXP.iso c:\Win.iso
// кстати, размером в 4.5 гига
del %0
Создал папку, скопировал файл и удалился... Сам...
W0LF вне форума Ответить с цитированием
Старый 31.07.2010, 02:13   #12
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию

Цитата:
Сообщение от W0LF Посмотреть сообщение
Только, что попробывал на примере:
md NewFolder
copy WinXP.iso c:\Win.iso
// кстати, размером в 4.5 гига
del %0
Создал папку, скопировал файл и удалился... Сам...
Да все работает норм, надо было закрыть файл перед удалением.
Но появилась другая проблема эта фнкция работает отлично, вот только когда выполняется .cmd файл, окно видно на экране, я хочу сделать как и в ShellExecute(...,ShowCmd: SW_HIDE); но в функции WinExecute(CmdLine: string; Wait: Boolean): Boolean; этого сделать нельзя... Как можно это сделать красиво ?
Код:
function WinExecute(CmdLine: string; Wait: Boolean): Boolean;
var
  StartupInfo: TStartupInfo;
  ProcessInformation: TProcessInformation;
begin
  Result := True;
  try
    FillChar(StartupInfo, SizeOf(StartupInfo), 0);
    StartupInfo.cb := SizeOf(StartupInfo);
    if not CreateProcess(nil, PChar(CmdLine), nil, nil, True, 0, nil,
    nil, StartupInfo, ProcessInformation) then
      RaiseLastWin32Error;
    if Wait then
      WaitForSingleObject(ProcessInformation.hProcess, INFINITE);
  except
    Result := False;
  end;
end;
1 старый программист, лучше новых 2-х
Droid вне форума Ответить с цитированием
Старый 31.07.2010, 20:47   #13
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Код:
uses ..., ShellApi;
...
var ExecInfo: TShellExecuteInfo;
begin
  ZeroMemory(@ExecInfo, sizeOf(ExecInfo));
  with ExecInfo do
  begin
    cbSize := sizeOf(ExecInfo);
    lpVerb := 'open';
    lpFile := 'C:\1.bat';
    lpParameters := '';
    nShow := SW_HIDE;
    fMask := SEE_MASK_NOCLOSEPROCESS;
  end;

  ShellExecuteEx(@ExecInfo);
  WaitForSingleObject(ExecInfo.hProcess, INFINITE);
  CloseHandle(ExecInfo.hProcess);
end;
пыщь
JTG вне форума Ответить с цитированием
Старый 01.08.2010, 02:12   #14
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию

Цитата:
Сообщение от JTG Посмотреть сообщение
Код:
uses ..., ShellApi;
...
var ExecInfo: TShellExecuteInfo;
begin
  ZeroMemory(@ExecInfo, sizeOf(ExecInfo));
  with ExecInfo do
  begin
    cbSize := sizeOf(ExecInfo);
    lpVerb := 'open';
    lpFile := 'C:\1.bat';
    lpParameters := '';
    nShow := SW_HIDE;
    fMask := SEE_MASK_NOCLOSEPROCESS;
  end;

  ShellExecuteEx(@ExecInfo);
  WaitForSingleObject(ExecInfo.hProcess, INFINITE);
  CloseHandle(ExecInfo.hProcess);
end;
Вроде все работает но снова не удаляет файл, в чем я тут намудрил ? (
Код:
var
s,put,ppc,k: string;
spravka: TextFile;
ExecInfo: TShellExecuteInfo;
begin
f_PAS.ShowModal;
getdir(0,put);  // 0-номер каталога по умолчанию put-переменная
 showmessage(put) ;

s :=put+'\mysql.exe'+' --user='+f_pas.edit1.Text+
''+' --password='+f_pas.edit2.Text+''+' --database=ps 
< '+put+'\ps.sql';  // создание строки дампа
    k:='del '+'"%0"';
  ZeroMemory(@ExecInfo, sizeOf(ExecInfo));

AssignFile(spravka,put+'\bd'+'.cmd');
Rewrite(spravka);
Writeln(spravka,s);
Writeln(spravka,k);
Reset(spravka);
with ExecInfo do
  begin
    cbSize := sizeOf(ExecInfo);
    lpVerb := 'open';
    lpFile := Pchar(put+'\bd'+'.cmd');
    lpParameters := nil;
    nShow := SW_hide;
    fMask := SEE_MASK_NOCLOSEPROCESS;
  end;

  ShellExecuteEx(@ExecInfo);
  WaitForSingleObject(ExecInfo.hProcess, INFINITE);
  CloseHandle(ExecInfo.hProcess);
end;
    fMask := SEE_MASK_NOCLOSEPROCESS;
  end;

  ShellExecuteEx(@ExecInfo);
  WaitForSingleObject(ExecInfo.hProcess, INFINITE);
  CloseHandle(ExecInfo.hProcess);
end;
1 старый программист, лучше новых 2-х
Droid вне форума Ответить с цитированием
Старый 01.08.2010, 17:05   #15
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

%0 в бат-файле возвращает путь уже в кавычках
"%0" даст инвалидный ""C:\path\file.ext""

"%~f0" предпочтительнее, т.к. разворачивает путь в полный с расширением, независимо от того, как запустили батник (из консоли, вообще не указывая расширение, например)
пыщь
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ожидание завершения потоков Voody Общие вопросы Delphi 11 14.06.2016 06:10
Ожидание нажатия клавиши shurik_7866 Общие вопросы Delphi 2 25.04.2010 19:53
Ожидание подключения к серверу. i-cpp C/C++ Сетевое программирование 2 13.02.2010 23:15
Определить содержимое файла f после выполнения операторов Corwin88 Помощь студентам 11 02.06.2008 00:39