Форум: "Media";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Вниз
Скопировать экран в буфер Найти похожие ветки
← →
3APA3A © (2004-03-29 04:40) [0]Задача: Надо передавать изображение с монитора по сети на другой комп и там его отображать
Вопрос:
1) мне надо скопировать экран в буфер и получить указатель на этот самый буфер.
2) размер буфера, как я понимаю, определяется как 1024*768*4 байт (для разрешения 1024х768 и 32-битного цвета)?
3) соответственно, потом надо этот кусок памяти отобразить... подскажите как все это сделать, pls...
← →
1 (2004-03-29 09:38) [1]Ну ты Васёк хуе.сос :)
← →
Zemal © (2004-03-29 10:53) [2]
...
var BMP: TBitmap;
begin
try
if FFullScreen then
begin
BMP := TBitmap.Create;
BMP.Width := Screen.Width;
BMP.Height := Screen.Height;
BitBlt(BMP.Canvas.Handle, 0, 0, BMP.Width, BMP.Height,
GetDC(GetDesktopWindow), 0, 0, SRCCOPY);
end
else BMP := Screen.ActiveForm.GetFormImage;
BMP.SaveToFile("c:\Screen.bmp");
finally
FreeAndNil(BMP);
end;
...
end;
Надеюсь знаешь что дальше будешь делать с этим битмапом :). А вообще удалённого управления на основе посылаемых битмапов может сделать только полный ... хм-хм... извиняюсь... Это какой же трафик будет! Просто волосы дыбом на ж...пе встанут :). Есть же такие программы уже давно, например RAdmin и NetOp. Они гонят с компа минимальный трафик и позволяют сделать всё что угодно. Зачем гимороишься малой? Займись ка лучше делом... возьми и почитай немного :). Пользы больше будет и вопросы глупые перестанут мучать :).
← →
3APA3A © (2004-03-30 11:06) [3]Ты не совсем понял задачу... Мне не надо полное управление.. Мне вообще никакое управление не надо... Мне надо просто передавать то, что сейчас нарисовано на экране... И других способов, кроме как брать и передавать картинку я не вижу...Ну понятно что можно ее сжать, оптимизировать всё и вся, но суть не меняется...
Если знаете способ, как передать изображение, не считывая ничего с экрана и не передавая это изображение по сети - расскажите пожалуйста..
P.S. Почему это мой вопрос глупый? Ничем не хуже других, imho...
← →
Guest © (2004-03-31 10:07) [4]Zemal ©
>ваш код не работает... ( точнее работает, но не всегда...:) )
не всегда все можно сграбить с экрана...
← →
3APA3A © (2004-03-31 14:02) [5]А как можно сграбить всегда и все?
← →
$tranger © (2004-03-31 19:00) [6]
unit ScrnCap;
делает снимок с экрана, добавь сохранение на удаленный компьютер, а втроая часть программы на удаленном (LAN) компьютере будет получать обновления и выдавать битмап
interface
uses
WinTypes, WinProcs, Forms, Classes, Graphics, Controls;
{ Копирует прямоугольную область экрана }
function CaptureScreenRect(ARect : TRect) : TBitmap;
{ Копирование всего экрана }
function CaptureScreen : TBitmap;
{ Копирование клиентской области формы или элемента }
function CaptureClientImage(Control : TControl) : TBitmap;
{ Копирование всей формы элемента }
function CaptureControlImage(Control : TControl) : TBitmap;
implementation
function GetSystemPalette : HPalette;
var
PaletteSize : integer;
LogSize : integer;
LogPalette : PLogPalette;
DC : HDC;
Focus : HWND;
begin
result:=0;
Focus:=GetFocus;
DC:=GetDC(Focus);
try
PaletteSize:=GetDeviceCaps(DC, SIZEPALETTE);
LogSize:=SizeOf(TLogPalette)+(PaletteSize-1)*SizeOf(TPaletteEntry);
GetMem(LogPalette, LogSize);
try
with LogPalette^ do
begin
palVersion:=$0300;
palNumEntries:=PaletteSize;
GetSystemPaletteEntries(DC, 0, PaletteSize, palPalEntry);
end;
result:=CreatePalette(LogPalette^);
finally
FreeMem(LogPalette, LogSize);
end;
finally
ReleaseDC(Focus, DC);
end;
end;
function CaptureScreenRect(ARect : TRect) : TBitmap;
var
ScreenDC : HDC;
begin
Result:=TBitmap.Create;
with result, ARect do
begin
Width:=Right-Left;
Height:=Bottom-Top;
ScreenDC:=GetDC(0);
try
BitBlt(Canvas.Handle, 0,0,Width,Height,ScreenDC, Left, Top, SRCCOPY );
finally
ReleaseDC(0, ScreenDC);
end;
Palette:=GetSystemPalette;
end;
end;
function CaptureScreen : TBitmap;
begin
with Screen do
Result:=CaptureScreenRect(Rect(0,0,Width,Height));
end;
function CaptureClientImage(Control : TControl) : TBitmap;
begin
with Control, Control.ClientOrigin do
result:=CaptureScreenRect(Bounds(X,Y,ClientWidth,ClientHeight));
end;
function CaptureControlImage(Control : TControl) : TBitmap;
begin
with Control do
if Parent=nil then
result:=CaptureScreenRect(Bounds(Left,Top,Width,Height))
else
with Parent.ClientToScreen(Point(Left, Top)) do
result:=CaptureScreenRect(Bounds(X,Y,Width,Height));
end;
end.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.039 c