Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизCMD Найти похожие ветки
← →
Klopan © (2004-09-20 20:58) [0]как получить вывод из командной строки?
← →
Defunct © (2004-09-20 21:08) [1]вывод чего?
← →
klopan © (2004-09-20 21:15) [2]командной строки
(Microsoft Windows XP [версия 5.1.2600]
(‘) корпорация майкрософт, 1985-2001.)
и все остальное
← →
Fay © (2004-09-20 21:17) [3]С помощью CreateProcess, к примеру. Готово кода под рукой нет. М.б. наморщу 8)
← →
klopan © (2004-09-20 21:19) [4]а это не из какой-то dll берется?
← →
Fay © (2004-09-20 21:20) [5]Ага. Там надо заменить lpStartupInfo.hStdOutput
← →
Zacho © (2004-09-20 21:20) [6]
>Defunct © (20.09.04 21:08)
> вывод чего?
Не лишним будет ещё спросить "И куда ? И зачем ?"
:-)
← →
Fay © (2004-09-20 21:21) [7]2 [4] klopan © (20.09.04 21:19)
Если вопрос мне, то из Kernel32.dll. Можно просто "из модуля" Windows.
← →
klopan © (2004-09-20 21:38) [8]ага, нашел я код. все работает. Спасиба.
[code]
function TForm1.RunCaptured(const _dirName, _exeName, _cmdLine: string): Boolean;
var
start: TStartupInfo;
procInfo: TProcessInformation;
tmpName: string;
tmp: Windows.THandle;
tmpSec: TSecurityAttributes;
res: TStringList;
return: Cardinal;
i: integer;
begin
Result := False;
try
{ Setze ein Temporares File }
{ Set a temporary file }
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;
{ Starte das Programm }
{ Start the program }
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);
{ Die Ausgaben hinzufugen }
{ Add the output }
res := TStringList.Create;
try
res.LoadFromFile(tmpName);
for i:= 0 to res.Count - 1 do
RichEdit1.Lines.Add(DosToWin(res.Strings[i]));
finally
res.Free;
end;
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;
[/code]
но мне нужно чтоб в ней небыло _dirName, т.е только имя cmd.exe файла и сама команда.
← →
klopan © (2004-09-20 21:48) [9]можно ли такое?
← →
Fay © (2004-09-20 21:49) [10]
> но мне нужно чтоб в ней небыло _dirName, т.е только имя
> cmd.exe файла и сама команда.
Не возражаю. 8)
Есть проблемы?
← →
klopan © (2004-09-20 21:56) [11]как оставить только cmd.exe и саму команду в это функции?
← →
Fay © (2004-09-20 22:00) [12]cmd.exe /?
← →
klopan © (2004-09-20 22:03) [13]:)
а если использовать такую команду: cd c:\windows\system32\
← →
Zacho © (2004-09-20 22:06) [14]klopan © (20.09.04 22:03) [13]
Ты лучше свою задачу опиши.
← →
klopan © (2004-09-20 22:11) [15]
function TForm1.RunCaptured(const _dirName, _exeName, _cmdLine: string): Boolean;
var
start: TStartupInfo;
procInfo: TProcessInformation;
tmpName: string;
tmp: Windows.THandle;
tmpSec: TSecurityAttributes;
res: TStringList;
return: Cardinal;
i: integer;
begin
Result := False;
try
{ Setze ein Temporares File }
{ Set a temporary file }
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;
{ Starte das Programm }
{ Start the program }
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);
{ Die Ausgaben hinzufugen }
{ Add the output }
res := TStringList.Create;
try
res.LoadFromFile(tmpName);
for i:= 0 to res.Count - 1 do
RichEdit1.Lines.Add(DosToWin(res.Strings[i]));
finally
res.Free;
end;
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;
есть эта функция.
надо чтоб в ней небыло _dirName. т.к если использовать команду: cd c:\windows\system32\ то путь неменяется.
← →
Zacho © (2004-09-20 22:18) [16]Блин, ещё раз: опиши задачу !
И почитай http://ln.com.ua/~openxs/articles/smart-questions-ru.html
← →
klopan © (2004-09-20 22:22) [17]ну что тут непонятного?
нужно из функции убрать "const _dirName"
чтоб получилось так: function TForm1.RunCaptured(const _exeName, _cmdLine: string): Boolean;
← →
Fay © (2004-09-20 22:24) [18]Сам убрать можешь?
← →
klopan © (2004-09-20 22:26) [19]мог бы - непросил
← →
Fay © (2004-09-20 22:34) [20]Так? 8)
function TForm1.RunCaptured(_exeName, _cmdLine: string): Boolean;
var
start: TStartupInfo;
procInfo: TProcessInformation;
tmpName: string;
tmp: Windows.THandle;
tmpSec: TSecurityAttributes;
res: TStringList;
return: Cardinal;
i: integer;
begin
Result := False;
try
{ Setze ein Temporares File }
{ Set a temporary file }
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;
{ Starte das Programm }
{ Start the program }
if CreateProcess(nil, PChar(_exeName + " " + _cmdLine), nil, nil, True,
0, nil, nil,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);
{ Die Ausgaben hinzufugen }
{ Add the output }
res := TStringList.Create;
try
res.LoadFromFile(tmpName);
for i:= 0 to res.Count - 1 do
RichEdit1.Lines.Add(DosToWin(res.Strings[i]));
finally
res.Free;
end;
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;
← →
Zacho © (2004-09-20 22:36) [21]Ещё раз :)
Задачу описать можешь ?
← →
klopan © (2004-09-20 22:45) [22]> Так? 8)
так, всем спасибо!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.033 c