Здравствуйте, CastleMaster, Вы писали:
CM>как я делал — делал скриншот всего экрана и копался в битах чтобы выделить CM>изменившийся прямоугольник. Потом приходилось переснимать скриншот изменившийся CM>части — и пересылать его — мне кажется два скриншота подрят будут подтормаживать систему.
во первых вопрос
у меня почемуто такое ощущение, что клиентом отсылающим скриншот являтеся само приложение ? тоесть оно как бы само себя скриншотит и отсылает админской части ?
если да то маленький совет
в главной форме отслеживайте все виндовые сообщения через
protected override void WndProc(ref Message m)
определяйте какому "окну" дочернему элементу фашей формы предназночалось данное сообщение
(всяческие mouseOver можно пропускать — хотя можно и отсылать админу и симулировать движение курсора — если это не обходимо)
в итоге вы можете пропустив сообщение через фильтр который решит что данное сообщение возникло после перерисовки дочернего элемента
вычислить по хендлу элемента его размер и позицию на экране
"отскриншотить" только заданную область
и именно её отправить админу
я подозреваю что большая часть времени у вас как раз сьедается на попиксельное сравнение и вычисление изменившейся секции
(при описанном выше подходе скорее всего возникнут проблемы с меню и контекстным меню)
впрочем вам стоит копать в сторону хуков
смотрите на класс System.Windows.Forms.NativeWindow
в мсдн есть примеры
фактически вам надо просто перехватить WM_PAINT и ещё парочку сообщений для всех hwnd винды
позволить системе отработать сообщение
и в случае если обьект вам интересен — принадлежит вашей апликации
получить баундинг отрисовавшевося обьекта — и отправить его админу
а уж сжатие картинки или её грейскейл это всеголиш косметика
и учтите, не все форматы "одинаково полезны" — хорошо жмутся