imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 29.12.2005, 14:01     # 1
Chaser
Junior Member
 
Регистрация: 20.10.2005
Адрес: Москва
Сообщения: 70

Chaser Реально крут(а)Chaser Реально крут(а)Chaser Реально крут(а)Chaser Реально крут(а)
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 программы?
Chaser вне форума  
Старый 09.01.2006, 15:33     # 2
miroslav
Guest
 
Сообщения: n/a

А если просто эмулировать нажатие клавиши PrintScreen
 
Старый 10.01.2006, 12:09     # 3
Chaser
Junior Member
 
Регистрация: 20.10.2005
Адрес: Москва
Сообщения: 70

Chaser Реально крут(а)Chaser Реально крут(а)Chaser Реально крут(а)Chaser Реально крут(а)
Тогда получается просто белый экран
Chaser вне форума  
Старый 17.01.2006, 11:31     # 4
qnx
Newbie
 
Регистрация: 30.09.2002
Сообщения: 9

qnx Путь к славе только начался
Решается очень просто - перенаправлением вывода.
__________________
_alex
qnx вне форума  
Старый 22.01.2006, 17:06     # 5
ZZToP
Guest
 
Сообщения: n/a

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

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




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