Форум: "Прочее";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
ВнизСкриншот Полноокранной DOS-программы Найти похожие ветки
← →
kaZaNoVa © (2006-02-14 10:39) [0]Сабж, как реализовать?
обычными методами не получается:(
← →
SPeller © (2006-02-14 10:44) [1]В свое время был озадачен этой проблемой. Пришлось программу запускать под виртуальной машиной и оттуда уже брать скриншот :)
← →
Anatoly Podgoretsky © (2006-02-14 10:58) [2]Загадками говоришь, вообще в большинстве случаев это копия буфера A000:0000, или B000:0000, или B800:0000
в зависимости от типа видео карты и видеорежима.
← →
kaZaNoVa © (2006-02-14 11:28) [3]SPeller © (14.02.06 10:44) [1]
аха, я сейчас так же делал .. но не всегда это приемлимо ..
Anatoly Podgoretsky © (14.02.06 10:58) [2]
а как оттуда брать скриншот?
обычные вещи вроде:Var bmp: TBitmap;
begin
bmp := TBitmap.Create;
bmp.Height := Screen.Height;
bmp.Width := Screen.Width;
BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, GetDC(GetDesktopWindow), 0, 0, SRCCopy);
bmp.SaveToFile("5.bmp");
bmp.Free;
не помогают((
← →
Anatoly Podgoretsky © (2006-02-14 11:32) [4]kaZaNoVa © (14.02.06 11:28) [3]
Какой битмап, у ДОС програмы нет окна
← →
Vlad Oshin © (2006-02-14 11:35) [5]по адресам
> A000:0000, или B000:0000, или B800:0000
первый байт - символ, второй - фон
← →
Kerk © (2006-02-14 12:31) [6]В кладовке вроде была прога-пример скриншота консоли. Поищи.
← →
kaZaNoVa © (2006-02-14 14:10) [7]Kerk © (14.02.06 12:31) [6]
нашел тока:
http://kladovka.net.ru/index.cgi?pid=list&rid=30
но нет уверенности, что это то, что нужно..
← →
Jeer © (2006-02-14 14:19) [8]Через handle от FindWindow() по поиску ClassName = "ConsoleWindowClass";
Title = "Command Prompt";
← →
kaZaNoVa © (2006-02-14 16:28) [9]что-то [7] вариант не сработал .. еще есть предложения?
Jeer © (14.02.06 14:19) [8]
handle
как ?
← →
Marser © (2006-02-14 16:51) [10]Я таким баловался 5.5 лет назад. Вот фрагменты:
//Сохранение
var
scr:array[1..4000] of byte;
p:pointer;
procedure scr_copy;
begin
p:=ptr($B800,0);
move(p^,scr,4000);
end;
//Восстановление
procedure scr_copy;
begin
p:=ptr($B800,0);
move(scr,p^,4000);
end;
Работало в ТР7 для режима 80х25.
← →
Альф (2006-02-14 17:07) [11]Скриншот полноэкранной ДОС программы прекрасно делается средствами VMWare :)
← →
kaZaNoVa © (2006-02-14 17:12) [12]Альф (14.02.06 17:07) [11]
Скриншот полноэкранной ДОС программы прекрасно делается средствами VMWare :)
естественно, однако на везде установлена подобная программа - см [1]
нужна своя, програмная реализация
Marser © (14.02.06 16:51) [10]
а как такое чудо в файл формата BMP сохранить?)
← →
Marser © (2006-02-14 17:31) [13]> а как такое чудо в файл формата BMP сохранить?)
ИМХО, ничего сложного. Тот же шрифт, те же размеры. Только с цветовыми аттрибутами придётся слегка заморочиться.
← →
kaZaNoVa © (2006-02-14 17:41) [14]Marser © (14.02.06 17:31) [13]
а пример кода есть?))
← →
Marser © (2006-02-14 17:43) [15]> [14] kaZaNoVa © (14.02.06 17:41)
> Marser © (14.02.06 17:31) [13]
> а пример кода есть?))
Нету :-)
Можно будет на досуге поразмыслить :-)
← →
BiN © (2006-02-14 17:49) [16]ДОС приложение запускается в косоли. Получить доступ к ней можно разными способами.
С консоли же изображение снимается примерно так. (работает и в развернутом виде)
function CCOORD(AX,AY:SmallInt):COORD;
begin
with Result do
begin
X:=AX; Y:=AY;
end;
end;
function SmallRect(ALeft, ATop, ARight, ABottom: Smallint): TSmallRect;
begin
Result.Left := ALeft;
Result.Top := ATop;
Result.Bottom := ABottom;
Result.Right := ARight;
end;
procedure SaveConsoleOutput(Handle: THandle; Stream: TStream);
var
BI: TConsoleScreenBufferInfo;
C: COORD;
M: Pointer;
XLen, YLen: Integer;
R: TSmallRect;
begin
C.X:=0;
C.Y:=0;
Stream.Size:=0;
Win32Check(GetConsoleScreenBufferInfo(Handle, BI));
Stream.Write(BI, SizeOf(BI));
XLen:=BI.srWindow.Right-BI.srWindow.Left+1;
YLen:=BI.srWindow.Bottom-BI.srWindow.Top+1;
M:=AllocMem(XLen*YLen*SizeOf(char_info));
try
R:=SmallRect(0,0, XLen, YLen);
Win32Check( ReadConsoleOutputW(Handle, M, CCOORD(XLen, YLen),
CCOORD(0,0), R));
Stream.Write(R, SizeOf(R));
Stream.Write(M^, XLen*YLen*SizeOf(char_info));
finally
ReallocMem(M,0);
end;
end;
procedure LoadConsoleOutput(Handle: THandle; Stream: TStream);
var
BI: TConsoleScreenBufferInfo;
C: COORD;
M: Pointer;
XLen, YLen: Integer;
R: TSmallRect;
begin
Stream.Seek(0, soBeginning);
Stream.Read(BI, SizeOf(BI));
XLen:=BI.srWindow.Right-BI.srWindow.Left+1;
YLen:=BI.srWindow.Bottom-BI.srWindow.Top+1;
M:=AllocMem(XLen*YLen*SizeOf(char_info));
try
R:=SmallRect(0,0, XLen, YLen);
Win32Check(SetConsoleScreenBufferSize(Handle, BI.dwSize));
Stream.Read(R, SizeOf(R));
Stream.Read(M^, XLen*YLen*SizeOf(char_info));
Win32Check(WriteConsoleOutputW(Handle, M, CCOORD(XLen, YLen),
CCOORD(0,0), R));
finally
ReallocMem(M,0);
end;
end;
пример использования:
var
T: TMemoryStream;
begin
AllocConsole;
Writeln("This Example save screen buffer to data stream and restore it");
Writeln("RTFM");
SaveConsoleOutput(GetStdHandle(STD_OUTPUT_HANDLE), T);
Writeln("blablabla");
Writeln("blablabla");
T.Seek(0, soBeginning);
Writeln("Press Enter to restore screen buffer");
Readln;
LoadConsoleOutput(GetStdHandle(STD_OUTPUT_HANDLE), T);
end;
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.014 c