Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Командная строка


Oitxr ©   (2004-12-10 04:45:00) 

Например, печатаю  в командной строке команду «dir d:\». А как выполнить это с помощью Delphi? Как открыть к.строку понятно, а вот как выполнить в ней команду?


Leksiy   (2004-12-10 12:29:00) [1]

да забыл сказать это для вин2000 и винхп


Leksiy   (2004-12-10 12:28:00) [2]

это исходник функции

function RunCaptured(const _dirName, _exeName, _cmdLine: string): Boolean;
 var
  start: TStartupInfo;
  procInfo: TProcessInformation;
  tmpName: string;
  tmp: Windows.THandle;
  tmpSec: TSecurityAttributes;
  return: Cardinal;
  Begin
    Result := False;
    try
     //Создание временного файла
      tmpName := 'Test.tmp';
      FillChar(tmpSec, SizeOf(tmpSec), #0);
      tmpSec.nLength := SizeOf(tmpSec);
      tmpSec.bInheritHandle := True;
      tmp := Windows.CreateFile(PChar(tmpName), Generic_Write, File_Share_Write, @tmpSec, Create_Always, File_Attribute_Normal, 0);
      try
        FillChar(start, SizeOf(start), #0);
        start.cb := SizeOf(start);
        start.hStdOutput := tmp;
        start.dwFlags := StartF_UseStdHandles or StartF_UseShowWindow;
        start.wShowWindow := SW_Minimize;
       //Запуск программы
        if CreateProcess(nil, PChar(_exeName + ' ' + _cmdLine), nil, nil, True, 0, nil, PChar(_dirName), start, procInfo) then
          begin
            SetPriorityClass(procInfo.hProcess, Idle_Priority_Class);
            WaitForSingleObject(procInfo.hProcess, Infinite);
            GetExitCodeProcess(procInfo.hProcess, return);
            Result := (return = 0);
            CloseHandle(procInfo.hThread);
            CloseHandle(procInfo.hProcess);
            Windows.CloseHandle(tmp);
            Windows.DeleteFile(PChar(tmpName));
          end
        else
          begin
            Application.MessageBox(PChar(SysErrorMessage(GetLastError())), 'RunCaptured Error', MB_OK);
          end;
      except
        Windows.CloseHandle(tmp);
        Windows.DeleteFile(PChar(tmpName));
      raise;
      end;
    finally
    end;
  End;

ну и соответственно пример использования :)

RunCaptured('в какой директории', 'cmd.exe', '/c команда');


Anatoly Podgoretsky   (2004-12-10 12:24:00) [3]

Команды командной строки зашиты в командный интерпритатор.


Александр Иванов   (2004-12-10 12:12:00) [4]

Некоторые команды жестко "зашиты" в cmd, тогда придется их переписывать :)


Oitxr   (2004-12-10 11:50:00) [5]

Я хочу с помощью делфи выполнить любую команду командной строки
не запуская её(cmd).Вот.Можно ли это сделать на делфи?


Александр Иванов   (2004-12-10 10:04:00) [6]

megabyte-ceercop ©   (10.12.04 09:49) [6]
Точнее:
ShellExecute(Form1.Handle,'open','d:\','','d:\',SW_SHOW);

Oitxr ©   (10.12.04 09:42) [5]
Насколько я понял вам нужно при каждом запуске приложения знать номер этого запуска?


megabyte-ceercop   (2004-12-10 09:49:00) [7]

Если нужна именно команда d:\ то делай:

ShellExecute(Form1.Handle,"open",'d:\',NULL,'d:\",SW_SHOW);

описание см в хелпе.


Oitxr   (2004-12-10 09:42:00) [8]

Хочу написать триальную прогу и хранить данные о количестве запусков в альтернативном файловом потоке.
А с потоком умею работать только с помощью консоли.


Александр Иванов   (2004-12-10 09:35:00) [9]

А что тебе нужно конкретно?

Список файлов в директории, тогда - FindFirst, FindNext.
Вызов cmd, тогда CreateProcess.


Oitxr   (2004-12-10 09:32:00) [10]

Как это можно сделать?


megabyte-ceercop   (2004-12-10 09:29:00) [11]

Нафига. Любую команду команденой строки (или альтернативную) можно выполнить без вызова командной строки.


Рамиль   (2004-12-10 08:57:00) [12]

набери в командной строке
cmd /?


Наверх

Титульная страница Поиск, карта сайта Написать письмо