Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.06;
Скачать: CL | DM;

Вниз

Скопировать экран в буфер   Найти похожие ветки 

 
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;

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.
делает снимок с экрана, добавь сохранение на удаленный компьютер, а втроая часть программы на удаленном (LAN) компьютере будет получать обновления и выдавать битмап



Страницы: 1 вся ветка

Текущий архив: 2004.06.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
14-1084967317
AlexG
2004-05-19 15:48
2004.06.06
Кому нужны лодочные моторы?


4-1083071564
Maks Realov
2004-04-27 17:12
2004.06.06
"Самоубийство" в runtime наследников НЕ TCustomForm.


1-1085226058
Talle
2004-05-22 15:40
2004.06.06
Использовать процедуры из Dll, написанного на С builder6?


14-1084878126
Карелин Артем
2004-05-18 15:02
2004.06.06
Только крутым программерам!


14-1084759068
Думкин
2004-05-17 05:57
2004.06.06
С днем рождения! 17 мая