Хоть убейте не могу понять, зачем в реализациях VNC сервера так много нагромождений? В частности под Windows. Почти все выходят порядка 500 КБ в сжатом виде. А так больше метра. Ведь по факту там нет ничего очень сложного и почти всё сможет уместиться в к десятки килобайт. Или я что-то путаю? Почитал что там очень много хитростей при реализации протокола. Но всё равно не вижу ничего сверхъестественного. Лично сам вижу реализацию такой (без поддержки передачи файлов и шифрования (хотя шифрование легко реализовать)): 1) Создаем еще один рабочий desktop (1 апишка) 2) Запускаем свою копию на этом декстопе (1 апишка) 3) В запущенной копии запускаем Explorer (1 апишка) Итог - всё что будет запускаться, автоматически будет отображаться на параллельном декстопе, который никто не увидит. При этом запускаться будет от прав текущего пользователя. т.е. даже админские привелегии не нужны. 4) Допустим классическая схема сервера (5 апишек для ожидания клиента) 5) Подготовка экрана к банальному грабингу (5 апишек). Допустим оверлей грабить не будем. 6) Выделение памяти. (основной буфер, предыдущий, рабочий). (1 апишка) 7) Запуск Таймера для грабинга (1 апишка) 8) Запуск потока получения инфы от клиента (1 апишка) 9) получение инфы от клиента (координаты мыши и ввод) - цикл чтения + установка координат мыши и эмуляция нажатия на клавишу (3-4 апишки) 10) Непосредственно грабинг буфера по таймеру (допустим с частотой 10 fps хватилобы). (3-4 апишки) 11) удаление не изменившихся данных (1 цикл простой) 12) Разбиение изменений на прямоугольники (чуть сложнее но операции банальны) 13) если данных больше чем определенное число, то упаковать их. Причем можно не париться, а взять какюнить небольшую либу (туже aplib) или чтонить простенькое не сильно большое (ну вот какраз 10кб максимум веса). К примеру кусок реализации zip упаковки выйдит какраз кил в 10-15 без сжатия. В принципе небольшие доделки и этого уже должно хватить выши крыши, чтобы сделать свою реализацию удаленного управления. Итого реально 20-30 килобайт выйдит без сжатия UPX (а с ним и того меньше). ну так почему в данный момент нету такого рода софта с таким размером? P.S. Комменты в стиле: Зачем это? Сейчас и 500кб нормальный размер и прочие будут удаляться сразу! P.P.S как показала практика такое реализовать можно только на томже рабочем столе что и у пользователя, считать или послать данные другому столу винда не даст. Но всё равно это не меняет сути.
Зачем это? =))) VNC хорош тем что это описаный протокол с большим количеством существующих клиентов (http://www.realvnc.com/docs/rfbproto.pdf дока). Все что ты описал конечно замечательно, но все надо делать с нуля... Можно взять готовую реализацию (libvncserver), выкинуть все ненужное ( разные алгоритмы сжатия, оставить raw и какой нибудь ZRLE), и получишь на выходе то что нужно. P.S. http://rootfox.com/hk/articles/0x48k-VisualSpy.htm реализация твоей задумки
Идея минимизации хороша для некоторых специфических дел. Но, не забывай, что внц, если я не ошибаюсь, есть и много доп фич, которые требуют дополнительного объема кода. Как минимум, те же алгоритмы оптимизации качества передачи изображения в зависимости от ширины канала.