IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Delphi: Как программно заграбить (аналог PrintScreen) полноэкранное DOS окно? (https://www.imho.ws/showthread.php?t=97946)

Chaser 29.12.2005 14:01

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 программы?

miroslav 09.01.2006 15:33

А если просто эмулировать нажатие клавиши PrintScreen

Chaser 10.01.2006 12:09

Тогда получается просто белый экран :(

qnx 17.01.2006 11:31

Решается очень просто - перенаправлением вывода.

ZZToP 22.01.2006 17:06

2qnx:
с этого момента пожалста поподробней, если можно с примерами.


Часовой пояс GMT +4, время: 09:27.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.