Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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;

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 вся ветка

Форум: "Media";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
6-1082036537
Roman
2004-04-15 17:42
2004.06.06
Вопрос по FPiette


14-1084845618
ИМХО
2004-05-18 06:00
2004.06.06
"Терять голову от любви"


3-1084486162
Shade_
2004-05-14 02:09
2004.06.06
Документация на русском FireBird, FastReports


8-1080647563
i2e
2004-03-30 15:52
2004.06.06
Как одну из картинок ImageList загружать в Image?


14-1084548049
sagsoft
2004-05-14 19:20
2004.06.06
помогите решить





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский