Конференция "Сети" » управление удаленным рабочим столом
 
  • Света (12.02.10 08:07) [20]
    А исходных текстов с использованием intel...jpeg у когонибудь есть ?
  • Slym © (16.02.10 13:47) [21]
    какие тексты нужны? заголовки к интеловской библиотеке (IJL.pas) в комплекте с самой библиотекой... а там все просто JPEG_IO.pas:

    procedure SaveBmpToJpegFile  (Bitmap:TBitmap;const FileName:string; const Quality: integer);
    procedure SaveBmpToJpegStream(Bitmap:TBitmap;Stream: TMemoryStream; const Quality: integer);
    procedure LoadBmpFromJpegFile(Bitmap:TBitmap;const FileName:string;
     const SetPixelFormat:boolean=true; const Scale:TIJLScale=ijlFull);
    procedure LoadBmpFromJpegStream(bitmap: TBitmap;  Stream:TMemoryStream;
     const SetPixelFormat:boolean=true; const Scale:TIJLScale=ijlFull);
  • Света (20.02.10 12:32) [22]
    kolobok776@ya.ru

    Мне бы исходники просмотра удаленного рабочего стола , можно даже без управления , только чтобы процессор особо программа не нагрудала , может есть у кого , заранее благодарна ! kolobok776@ya.ru
  • Света (20.02.10 13:08) [23]
    А исходных текстов на все написанное выше может выложим ?
  • Плохиш © (21.02.10 00:51) [24]

    > PascalC   (25.11.08 13:14) [4]

    >  а вообще -люблю изобретать велосипеды :)


    > Поэтому и спрашиваю, может у кого исходники на делфях завалялись,
    >  которые не жалко?

    Как-то не вяжутся эти фразы. Или копи-паст уже стал называться изобретательством?
  • Slym © (24.02.10 10:45) [25]
    Света   (20.02.10 12:32) [22]
    только чтобы процессор особо программа не нагрудала

    с этим как раз основная проблема:
    1. основной напрягатор проца - сжатие картинки...
    2. чтоб снять напрягу - нужно убрать сжатие
    3. но без сжатия сетка колом встанет :)
    решение - передавать сжимая, но не каждый кадр, а только изменившуюся часть, а вот как определить что изменилось - другая задача и решается она по разному (от тупого сравнивания битмапов до драйвера дисплея)...

    простой пример отправил на мыло
  • Света (24.02.10 10:56) [26]
    Ага спасибо получила . Буду думать как обуздать mirror driver/
  • Света (10.03.10 09:04) [27]
    кого интересует эта тема , пишите у меня усе получилось - на делфи тока!
  • Slym © (10.03.10 13:54) [28]
    сюда выкладывай...
    или линк на архив залитый на файл хостинг (типа iFolder.ru)
  • Света (15.03.10 12:28) [29]
    Поче6муто не крепится , завтра привреплю
  • Света (08.04.10 11:15) [30]
    uses
     Windows, SysUtils, Graphics, MultiMon;

    type
     EMonitorCaptureException = class(Exception);

     TCaptureContext = (ccActiveWindow,ccDesktopMonitor,ccActiveMonitor,
                        ccSpecificMonitor,ccAllMonitors);

    function MonitorCount : Integer;

    procedure CaptureScreen(aCaptureContext : TCaptureContext; destBitmap : TBitmap;aMonitorNum : Integer = 1);

    procedure CaptureRect(aCaptureRect : TRect;destBitMap : TBitmap); inline;

    procedure CaptureDeviceContext(SrcDC: HDC;aCaptureRect : TRect;destBitMap : TBitmap); inline;

    function GetMonInfoByIdx(MonIdx : Integer) : MONITORINFO;

    implementation

    type
     MonIndex = record
       Idx : Integer;
       Cnt : Integer;
       MonInfo : MONITORINFO;
     end;
     PMonIndex = ^MonIndex;

    function MonCountCB(hm: HMONITOR; dc: HDC; r: PRect; l: LPARAM): Boolean; stdcall;
    begin
     inc(Integer(pointer(l)^));
     result := true;
    end;

    function MonitorCount : Integer;
    begin
     result := 0;
     EnumDisplayMonitors(0,nil,MonCountCB, Integer(@result));
    end;

    function MonInfoCB(hm: HMONITOR; dc: HDC; r: PRect; l: LPARAM): Boolean; stdcall;
    var
    MI : PMonIndex;
    begin
     MI := PMonIndex(pointer(l));
     Inc(MI.Cnt);
     if MI.Cnt = MI.Idx then
        GetMonitorInfo(hm,@(MI.MonInfo));
     result := true;
    end;

    function GetMonInfoByIdx(MonIdx : Integer) : MONITORINFO;
    var
    MI : MonIndex;
    begin
     MI.MonInfo.cbSize := SizeOf(MI.MonInfo);
     MI.Idx := MonIdx;
     MI.Cnt := 0;
     EnumDisplayMonitors(0,nil,MonInfoCB, Integer(@MI));
     result := MI.MonInfo;
    end;

    procedure CaptureScreen(aCaptureContext : TCaptureContext; destBitmap : TBitmap;aMonitorNum : Integer);
    var
      DC : HDC;
      h  : HWND;
      Mon : HMONITOR;
      MonInfo : MONITORINFO;
      lCapRect : TRect;
    begin
     Assert(Assigned(destBitMap));
     h := 0;
     FillMemory(@lCapRect,SizeOf(TRect),0);
     dc := CreateDC('DISPLAY',nil,nil,nil);
     try
       case aCaptureContext of
         ccActiveWindow:
         begin
           h   := GetForegroundWindow;
           GetWindowRect(h,lCapRect);
         end;
         ccDesktopMonitor:
         begin
          // This gets only the first/primary monitor
           lCapRect.Right  := GetDeviceCaps (DC, HORZRES);
           lCapRect.Bottom := GetDeviceCaps (DC, VERTRES);
         end;
         ccActiveMonitor:
         begin
           h  := GetForegroundWindow;
           Mon := MonitorFromWindow(h,MONITOR_DEFAULTTONEAREST);
           MonInfo.cbSize := SizeOf(MonInfo);
           GetMonitorInfo(Mon,@MonInfo);
           lCapRect := MonInfo.rcMonitor;
         end;
         ccSpecificMonitor:
         begin
           if (MonitorCount < aMonitorNum) or (aMonitorNum < 1) then
              raise EMonitorCaptureException.CreateFmt('Monitor Index out of Bounds [%d]',[aMonitorNum]);
           MonInfo := GetMonInfoByIdx(aMonitorNum);
           lCapRect := MonInfo.rcMonitor;
         end;
         ccAllMonitors:
         begin
           lCapRect.Right  := GetSystemMetrics(SM_CXVIRTUALSCREEN);
           lCapRect.Bottom := GetSystemMetrics(SM_CYVIRTUALSCREEN);
         end;
       end;
       CaptureDeviceContext(dc,lCapRect,destBitmap);
     finally
       ReleaseDC(h, DC) ;
      end;
    end;

    procedure CaptureDeviceContext(SrcDC: HDC;aCaptureRect : TRect;destBitMap : TBitmap);
    begin
       destBitmap.Width := aCaptureRect.Right - aCaptureRect.Left;
       destBitmap.Height := aCaptureRect.Bottom - aCaptureRect.Top;
       BitBlt(destBitmap.Canvas.Handle,
              0,
              0,
              destBitmap.Width,
              destBitmap.Height,
              SrcDC,
              aCaptureRect.Left,
              aCaptureRect.Top,
              SRCCOPY) ;
    end;

    procedure CaptureRect(aCaptureRect : TRect;destBitMap : TBitmap); inline;
    var
    dc : HDC;
    begin
     dc := CreateDC('DISPLAY',nil,nil,nil);
     try
        CaptureDeviceContext(dc,aCaptureRect,destBitMap);
     finally
       ReleaseDC(0,dc);
     end;
    end;
    end.

    Вот должно помочь!
  • Dennis I. Komarov © (09.04.10 09:36) [31]

    > Света   (15.03.10 12:28) [29]
    > Поче6муто не крепится , завтра привреплю
    > Света   (08.04.10 11:15) [30]
    > uses
    >  Windows, SysUtils, Graphics, MultiMon;

    А вот и "завтра" наступило :)
  • Сергей М. © (09.04.10 10:37) [32]
    "С пробужденьицем !"
    ))
  • Slym © (12.04.10 07:27) [33]
    Думал спостят mirror driver или какойнить fastBmpCompare/DifCutter, а оно все тоже только больше букаф
  • Света (15.04.10 11:48) [34]
    Да вот за границу с мужем ездили , вобшем у меня сорцы гднто на почте остались попробую найти среди спама , а на компе ничо не сохр . hddkill Славик решил испытать !
  • Anatoly Podgoretsky © (15.04.10 12:19) [35]
    Славик это кто?
  • brother © (15.04.10 12:22) [36]
    муж?
  • Сергей М. © (15.04.10 12:54) [37]
    Славик - это заслуженный муж-испытатель заграниц
  • Anatoly Podgoretsky © (15.04.10 13:16) [38]
    > Сергей М.  (15.04.2010 12:54:37)  [37]

    Главный вредитель, заслуженый.
  • Света (10.05.10 14:39) [39]
    Он у меня вооще вредитель самый главный - я его люблю таким какой он есть .
 
Конференция "Сети" » управление удаленным рабочим столом
Есть новые Нет новых   [134436   +26][b:0][p:0.001]