Как VNC непрерывно перекрашивает окна?

Как VNC отправляет сообщения REPAINT в окна, даже когда пользователь не активен?

Я хотел бы реализовать это в C-sharp - я посмотрел на методы PrintWindow, SendMessage, и ни один из них не дает того же результата, что и VNC (проверено путем захвата изображений и его черного цвета), но с VNC я получаю полную картину.

Какие методы они используют для этого и можно ли это реализовать в C-Sharp, чтобы окна всегда перерисовывались даже, когда пользователь не активен (например, RDP закрыт, свернут или что-то подобное).

Спасибо всем


person Kay    schedule 29.04.2011    source источник
comment
Я не понимаю, почему вы думаете, что PrintWindow терпит неудачу. Насколько я понимаю ваш вопрос, это должно делать именно то, что вы хотите. Я не совсем понимаю, что вы имеете в виду, когда описываете VNC как постоянно перекрашивающиеся окна.   -  person Cody Gray    schedule 29.04.2011
comment
@Cody - я тоже так думал, пока не попробовал PrintWindow(handle, hDC, 0); - ему не удалось захватить изображение, когда я свернул RDP-соединение с моей машиной Windows XP. Работает, когда RDP не свернут. Я думал, что смогу захватить изображение окна по памяти, но все, что он произвел, было окном с черной внутренней стороной. Пробовал для разных типов окон (блокнот, расч.). Затем я установил VNC и закрыл программу просмотра VNC, и она каждый раз работала. Это каким-то образом заставляет окна отображаться, даже если пользователь неактивен.   -  person Kay    schedule 29.04.2011


Ответы (2)


Вы можете использовать технику, используемую в видеоиграх, которая заключается в постоянном перерисовке окна во время простоя процессора.

Я нашел реализацию C # здесь.

Вам просто нужно адаптировать его под свои нужды.

person user703016    schedule 29.04.2011
comment
Очень интересно, мне нужно сначала прочитать об этом, я пока не хочу выкладываться изо всех сил! - person Kay; 29.04.2011

VNC НЕ отправляет сообщения WM_PAINT

Windows делает (и ей все равно, активен ли пользователь). Смотрите также

Можно ли сделать снимок экрана свернутого приложения?

Как программно получить скриншот свернутого приложения? < / а>

Создание снимков экрана удаленного рабочего стола в свернутом виде

person sehe    schedule 29.04.2011
comment
Хм, вы делаете иной вывод, чем тот, который делают ответы на вопросы, на которые вы ссылаетесь. Вы правы в том, что VNC не отправляет WM_PAINT сообщений, но это не означает, что Windows отправляет это сообщение, когда пользователь неактивен. Ответы на эти другие вопросы включают либо PrintWindow, либо использование преимуществ новых возможностей рисования, представленных в DWM. - person Cody Gray; 29.04.2011