|
Delphi: Как программно заграбить (аналог PrintScreen) полноэкранное DOS окно?
Кто знает, как программно заграбить (аналог PrintScreen) полноэкранное DOS окно?
Нижеприведенный код, получает данные из DOS окна, но только если оно не использует сложную структуру (command.com, ping.exe, arj.exe).
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;
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_SHOW;
// 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);
Memo1.Lines.Clear;
Memo1.Lines.AddStrings(res);
finally
res.Free;
end;
Windows.DeleteFile(PChar(tmpName));
end
else
begin
Application.MessageBox(PChar(SysErrorMessage(GetLastError())),
'RunCaptured Error', MB_OK);
end;
except
CloseHandle(tmp);
DeleteFile(PChar(tmpName));
raise;
end;
finally
end;
end;
procedure TForm1.Button13Click(Sender: TObject);
begin
RunCaptured(ExtractFilePath(Application.ExeName),
'ping.exe', ' 127.0.0.1');
end;
Если же требуется получить данные из окна программ: Norton Commander, различных базы данных под DOS и т.п., то ничего не выводится.
Как получать данные из полноэкранного окна из любой DOS программы?
|