Есть довольно типичная задача трансляции удаленного десктопа, с которой мне пришлось
столкнуться и которая уже не раз обсуждалась,
например
здесьАвтор: Denwer
Дата: 15.09.03
. Самый простой подход —
это периодическое сканирование десктопа, возможно последующее сжатие и отправка на сервер.
При этом используется известная своей низкой скоростью API функция BitBlt, которая копирует
битмапы. Например такой код на Delphi, выполняемый 4 раза в сек. стабильно загружал
P-IV 2,4G на уровне 20%.
procedure TForm1.Timer1Timer(Sender: TObject);
Var DeskHw,DeskHdC : Longint;
begin
DeskHw:=getdesktopwindow;
DeskHdc:=getdc(deskHw);
img.Canvas.FillRect(img.Canvas.ClipRect);
BitBlt(img.Canvas.Handle,0,0,Form1.Width,Form1.Height,DeskHdc,0, 0,SRCCOPY);
end;
Естественно, нужно искать альтернативные пути решения. Последующие его поиски показали, что
разумно использовать Microsoft NetMeeting SDK или писать собственный mirror драйвер.
Попробовал установить и потестить Microsoft NetMeeting. Самое интересное началось потом. Привожу
лишь факты:
До установки Microsoft NetMeeting SDK вышеупомянутая процедура как уже отмечалось занимала
20% CPU.
После установки Microsoft NetMeeting SDK — 0%!!!
Ещё замечательный факт:
Во время совместной работы обоих программ — 20%
По отдельности — 0%!!!
Причём это уже на машине P-III 800G, MS Windows 2000 Professional SP3.
Объяснения сему пока не нахожу.