|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.12.2015, 18:47 | #1 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
UVNC MD SDK Mirror Driver.
Всем конбамва!
Пока сижу в отпуске начал немного подумывать прорулить одно свое ПО по удаленному управлению компами (Аналог РАдмина). Хочу сделать ее "Выше-Быстрее-Сильнее". Шутка. Просто хочу немного улучшить скорость работы ПО за счет подключения Миррор драйвера. Нашел вот такую забавную шуткенцию: http://www.uvnc.com/products/mirror-driver.html Вопрос: Кто-нибудь уже работал с этим делом? Можете объяснить сам принцип применения этого драйвера? Исходники там конечно же есть, я их сейчас изучаю, но Делфийцу труднее понять код на Си. И я пока не очень понял как именно получать информацию о изменении экрана используя этот драйвер.
I'm learning to live...
|
11.12.2015, 20:07 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,770
|
Можно начать с офф док https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
|
11.12.2015, 20:29 | #3 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Погодь, а UVNC разве не свою методику прикрутили?
И потом, эта ссыль как его написать, да? Меня сейчас интересует как UVNC MD применить.
I'm learning to live...
|
11.12.2015, 20:42 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
там есть пример именно по получению изменений.
глянь. спрашивай что не понятно, постараюсь помочь(ибо я наоборот сча на си/шарпе, а не делфи) Един я проверять его не могу. у меня выше винда. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 11.12.2015 в 20:46. |
11.12.2015, 21:11 | #5 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Принцип работы прост. Код потребуется перевести.
1) Устанавливаем драйвер вручную. 2) Есть код для запуска драйвера. Для каждой ОС свой. 3) "Подключаемся" к драйверу. 4) Есть код привязки MD к первичному дисплею. Для разных ОС опять таки свой. В примере 3 и 4 пункт объединены в Start. Далее два варианта. Чтение из буфера кадра. В примере просто в цикле по таймеру читаются данные из этого буфера. myframebuffer:PByte; Эта переменная указывает на буфер содержащей экран в формате BI_RGB 32 Бита. RGBARGBARGBARGBA Второй вариант использовать кольцевой буфер изменённых прямоугольников. mypchangebuf.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
11.12.2015, 21:11 | #6 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
В VIDEODRIVER_start() есть вызов Код:
EnumDisplayDevices() нужен для того, чтоб эту канву создать/подключить. Верно? Тогда зачем ее удалять?: Код:
Цитата:
I'm learning to live...
|
||
11.12.2015, 22:41 | #7 |
Лис
Старожил
Регистрация: 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.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
11.12.2015, 22:43 | #8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Все равно я чет не пойму логики именно того примера. Зачем создавать канву, если потом она убирается?
I'm learning to live...
|
|
11.12.2015, 22:50 | #9 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
CreateDC - вызывается для создания Bitmap. Но помимо прочего создаётся и хэндел.
Если не освободить, то другие приложения и даже нитки не смогут вызывать CreateDC. Копировать хендел не вариант. Так как он уничтожиться по закрытию первого приложения. Так что получается что это хэндл общий глобальный ресурс. Поэтому по выходу из функции его надо освободить. А во вторых число хэнделов в ОС ограничено. И если их все исчерпать то это будер равносильно BSOD.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
11.12.2015, 22:54 | #10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,355
|
Скорее всего там бага в примере - этот DeleteDC похоже лишний.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |