![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Командная строка
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 /?