Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2015, 18:47   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию UVNC MD SDK Mirror Driver.

Всем конбамва!
Пока сижу в отпуске начал немного подумывать прорулить одно свое ПО по удаленному управлению компами (Аналог РАдмина). Хочу сделать ее "Выше-Быстрее-Сильнее". Шутка. Просто хочу немного улучшить скорость работы ПО за счет подключения Миррор драйвера.
Нашел вот такую забавную шуткенцию: http://www.uvnc.com/products/mirror-driver.html

Вопрос: Кто-нибудь уже работал с этим делом? Можете объяснить сам принцип применения этого драйвера? Исходники там конечно же есть, я их сейчас изучаю, но Делфийцу труднее понять код на Си. И я пока не очень понял как именно получать информацию о изменении экрана используя этот драйвер.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.12.2015, 20:07   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,770
По умолчанию

Можно начать с офф док https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
p51x вне форума Ответить с цитированием
Старый 11.12.2015, 20:29   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Погодь, а UVNC разве не свою методику прикрутили?
И потом, эта ссыль как его написать, да?
Меня сейчас интересует как UVNC MD применить.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.12.2015, 20:42   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

там есть пример именно по получению изменений.

глянь. спрашивай что не понятно, постараюсь помочь(ибо я наоборот сча на си/шарпе, а не делфи)

Един я проверять его не могу.
у меня выше винда.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 11.12.2015 в 20:46.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.12.2015, 21:11   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Принцип работы прост. Код потребуется перевести.

1) Устанавливаем драйвер вручную.
2) Есть код для запуска драйвера. Для каждой ОС свой.
3) "Подключаемся" к драйверу.
4) Есть код привязки MD к первичному дисплею. Для разных ОС опять таки свой.
В примере 3 и 4 пункт объединены в Start.

Далее два варианта.
Чтение из буфера кадра. В примере просто в цикле по таймеру читаются данные из этого буфера.
myframebuffer:PByte;
Эта переменная указывает на буфер содержащей экран в формате BI_RGB 32 Бита.
RGBARGBARGBARGBA


Второй вариант использовать кольцевой буфер изменённых прямоугольников.
mypchangebuf.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 11.12.2015, 21:11   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
спрашивай что не понятно
Ок.
В VIDEODRIVER_start() есть вызов
Код:
if (GetDcMirror()!=NULL)
Это как я понял канва зеркальца, на которую будет драйвер рисовать изменения. Да?
EnumDisplayDevices() нужен для того, чтоб эту канву создать/подключить. Верно?
Тогда зачем ее удалять?:
Код:
			if (DriverFound)
				{
				deviceName = (LPSTR)&dd.DeviceName[0];
				m_hrootdc = CreateDC("DISPLAY",deviceName,NULL,NULL);	
				if (m_hrootdc) DeleteDC(m_hrootdc);
				}
DeleteDC() тут зачем?
Цитата:
Pavia
Я код планирую под Лазарус перекроить, поэтому и хочу разобраться подробнее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.12.2015, 22:41   #7
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Create a DC or device-managed bitmap

To create a DC, device-managed bitmap, etc. using the mirrored surface, use the
ordinary GDI APIs. To create the DC specify, call CreateDC as follows:

HDC hdc = CreateDC("DISPLAY", // driver name
deviceName, // example 'mirror' device name
NULL,
NULL);

....
-----
Remarks

Note that the handle to the DC can only be used by a single thread at any one time.

For parameters lpszDriver and lpszDevice, call EnumDisplayDevices to obtain valid names for displays.

When you no longer need the DC, call the DeleteDC function.

If lpszDriver or lpszDevice is DISPLAY, the thread that calls CreateDC owns the HDC that is created. When this thread is destroyed, the HDC is no longer valid. Thus, if you create the HDC and pass it to another thread, then exit the first thread, the second thread will not be able to use the HDC.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 11.12.2015, 22:43   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
When you no longer need the DC, call the DeleteDC function.
Это MSDN?
Все равно я чет не пойму логики именно того примера. Зачем создавать канву, если потом она убирается?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.12.2015, 22:50   #9
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

CreateDC - вызывается для создания Bitmap. Но помимо прочего создаётся и хэндел.
Если не освободить, то другие приложения и даже нитки не смогут вызывать CreateDC.
Копировать хендел не вариант. Так как он уничтожиться по закрытию первого приложения.

Так что получается что это хэндл общий глобальный ресурс. Поэтому по выходу из функции его надо освободить. А во вторых число хэнделов в ОС ограничено. И если их все исчерпать то это будер равносильно BSOD.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 11.12.2015, 22:54   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,355
По умолчанию

Скорее всего там бага в примере - этот DeleteDC похоже лишний.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
driver dake18 Компьютерное железо 3 03.10.2012 02:02
Mirror driver уделенное управление uchenik_pro Работа с сетью в Delphi 2 08.09.2010 13:37
Qt driver for MySQL artush1984 Qt и кроссплатформенное программирование С/С++ 3 03.03.2010 20:55
Mirror's Edge Dmitriy99 Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 12.04.2009 19:51
Usb driver atom Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 20 24.11.2006 15:10