jak skopiowac plik txt albo wydobyć z niego tekst ??
utrudnienia jakie mam w funkcji to takie że jak program dziala i zapisuje tekst z aplikacji konsolowej do pliku podczas gdy jest ta aplikacja uruchomiona :/ to uchwyt pliku w którym jest zapisywany tekst z konsoli programu jest otwarty i niemoge kopiować sobie na bieżąco :/ zawartości :/
function RunCaptured(const _dirName, _exeName, _cmdLine, nazwa_pliku: string; tworz_raport: Boolean): Boolean;
var
start: TStartupInfo;
procInfo: TProcessInformation;
tmpName: string;
tmpSec: TSecurityAttributes;
return: Cardinal;
begin
Result := False;
try
{ tmpName to plik w którym zostaną zapisane dane z aplikacji konsolowej }
{ jeżeli wartosc tworz_raport będzie prawdą, jest to także plik tymczasowy }
tmpName := nazwa_pliku;
FillChar(tmpSec, SizeOf(tmpSec), #0);
tmpSec.nLength := SizeOf(tmpSec);
tmpSec.bInheritHandle := True;
tmp := Windows.CreateFile(PChar(tmpName),
GENERIC_WRITE, FILE_SHARE_READ and FILE_SHARE_WRITE,
@tmpSec, Create_Always, File_Attribute_Normal, 0);
//@tmpSec
//GENERIC_READ and
try
FillChar(start, SizeOf(start), #0);
start.cb := SizeOf(start);
start.hStdOutput := tmp;
start.dwFlags := StartF_UseStdHandles or StartF_UseShowWindow;
start.wShowWindow := SW_Minimize;
{ Start programu konsolowego }
if CreateProcess(nil, PChar(_exeName + ' ' + _cmdLine), nil, nil, True,
DETACHED_PROCESS, nil, PChar(_dirName), start, procInfo) then
begin
SetPriorityClass(procInfo.hProcess, Idle_Priority_Class);
//WaitForSingleObject(procInfo.hProcess, Infinite);
WaitForMultipleObjects(1, start.lpDesktop, true, 5);
GetExitCodeProcess(procInfo.hProcess, return);
Result := (return = 0);
CloseHandle(procInfo.hThread);
CloseHandle(procInfo.hProcess);
Windows.CloseHandle(tmp);
{ Dodawanie wyniku aplikacji do komoponntu TMemo }
res := TStringList.Create;
try
res.LoadFromFile(tmpName);
Form1.Memo1.Lines.AddStrings(res);
finally
res.Free;
end;
{ jeżeli plik tymczasowy nie potrzebny to go usuń }
if tworz_raport = false then
Windows.DeleteFile(PChar(tmpName));
end
else
begin
{ w razie problemów wyswietl komunikat }
Application.MessageBox(PChar(SysErrorMessage(GetLastError())),
'Błąd uruchomienia aplikacji konsolowej!', MB_OK);
end;
except
Windows.CloseHandle(tmp);
{ jeżeli plik tymczasowy nie potrzebny to go usuń }
if tworz_raport = false then
Windows.DeleteFile(PChar(tmpName));
raise;
end;
finally
end;
end;