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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2015, 23:02   #11
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Да MSDN От сюда

Цитата:
Зачем создавать канву, если потом она убирается?
Макрософт сама создала сложности что-бы потом их преодолевать.
Аналогия с канвой тут не до конца работает. Если заглянуть во внуторь канвы там хэнделы постоянно создаются и уничтожаются.
Хэндел это рука робота. Представь себе сторукого робота или бога.
CreateDC - берёт руку робота со склада и добавляет роботу ещё одну руку.
Затем SelectObject - выбирает предмет который положить в руку. Пусть Brush - ака кисть.
Затем Вы рисуете этой рукой. А после кисть вам не нужна вы откладываете её в сторону. Она продолжает существовать. Ровно как и Bitmap - лист бумаги.
Затем вызывается DeleteDC.
Рука робота не уничтожается. А просто ампутируется, удаляется. Т.е. просто отсоединяется и сдаётся на склад.

В ОС в каждой программе свой многорукий робот.
Но число рук ограниченно 10 000. И они все либо на складе, либо уже розданы роботам.
Всё бы было ничего. Но некоторые руки специфические. Одни могут держать только кисть, другие могут держать только мальберт.
Так вот макрософт решила не создавать много рук для Display и создала по числу устройств в железе. Поэтому и приходиться роботам обмениваться руками, передавая их друг дружки. Но не напрямую, а через склад.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 11.12.2015 в 23:12.
Pavia вне форума Ответить с цитированием
Старый 11.12.2015, 23:21   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты не понял. Я не могу понять зачем в самом примере UVNC сделали так.
Цитата:
этот DeleteDC похоже лишний.
Ну так я правильно понял - эта новая канва как раз то, куда будет рисовать драйвер изменения?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2015, 00:00   #13
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

@Pavia
Код:
m_hrootdc = CreateDC("DISPLAY",deviceName,NULL,NULL);	
if (m_hrootdc) DeleteDC(m_hrootdc);
Где здесь рисование?
waleri вне форума Ответить с цитированием
Старый 12.12.2015, 15:08   #14
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Первое о чем бы я подумал, это про цифровую подпись драйвера. Продукт-то бесплатный.
И дружит ли оно с ядром Win 8, а то там ведь львиная доля хомяков.

Последний раз редактировалось Человек_Борща; 12.12.2015 в 15:28.
Человек_Борща вне форума Ответить с цитированием
Старый 12.12.2015, 16:10   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
И дружит ли оно с ядром Win 8, а то там ведь львиная доля хомяков.
Примеры запускаются, и во-вторых я ориентируюсь на ХР. Эта разработка для предприятия, а там одни ХРюнчики
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2015, 18:41   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

мда, а код так никто и не посмотрел.
Виталий извини что не заходил.

GetDcMirror нужна для проверки того что драйвер загружен и успешно работает.
именно поэтому:
1)ищет драйвер по имени.
2)создает контекст к этому драйверу.
удаляет его потому что он тут не нужен, а дернут был чисто для проверки.
так что DeleteDC нужна.
результат функции означает был ли получен контекст или нет. ее можно заменить на bool.(а название на TestMirror)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.12.2015, 19:50   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-а-а... Фу ты ну ты...
Это всего лишь тест... Так ладно, я пока поиграюсь с ним, может позже будут еще вопросы.
Если удастся решить мою задачу - решение выложу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2015, 15:20   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Поднимаю тему.
Добрался до активации драйвера, теперь нужно понять как прикручивать к нему событие обновлений.
В примере есть такой код:
Код:
VIDEODRIVER::VIDEODRIVER_start(int x,int y,int w,int h,int depth)
{
	blocked=true;
	oldaantal=1;
	mypVideoMemory=NULL;
	OSVER=OSVersion();
	if (OSVER==OSWIN2000||OSVER==OSWIN2003||OSVER==OSWINXP)
	{
		if (Mirror_driver_attach_XP(x,y,w,h,depth))
		{
			if (GetDcMirror()!=NULL)
			{
			mypVideoMemory=VideoMemory_GetSharedMemory();
			mypchangebuf=(PCHANGES_BUF)mypVideoMemory;
			myframebuffer=mypVideoMemory+sizeof(CHANGES_BUF);
			}
			else
			{
				mypVideoMemory=NULL;
			}
		}
		else
		{
			mypVideoMemory=NULL;
		}
	}
и
Код:
PCHAR VIDEODRIVER::VideoMemory_GetSharedMemory(void)
{
   PCHAR pVideoMemory=NULL;
   HANDLE hMapFile, hFile, hFile0,hFile1;
   hFile=NULL;
   
   hFile0 = CreateFile("c:\\video0.dat", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
   hFile1 = CreateFile("c:\\video1.dat", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

   if ((hFile0 && hFile0 != INVALID_HANDLE_VALUE) && !(hFile1 && hFile1 != INVALID_HANDLE_VALUE)) hFile=hFile0;
   if ((hFile1 && hFile1 != INVALID_HANDLE_VALUE) && !(hFile0 && hFile0 != INVALID_HANDLE_VALUE)) hFile=hFile1;
   if ((hFile0 && hFile0 != INVALID_HANDLE_VALUE) && (hFile1 && hFile1 != INVALID_HANDLE_VALUE))
   {
	   DWORD size0=GetFileSize(hFile0,NULL);
	   DWORD size1=GetFileSize(hFile1,NULL);
	   if (size0==shared_buffer_size) hFile=hFile0;
	   if (size1==shared_buffer_size) hFile=hFile1;

   }


   if(hFile && hFile != INVALID_HANDLE_VALUE)
   {
       hMapFile = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);

       if(hMapFile && hMapFile != INVALID_HANDLE_VALUE)
       {
           pVideoMemory = (char *) MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0);
    
           CloseHandle(hMapFile);
       }

       CloseHandle(hFile);
   }
   
   return pVideoMemory;
}
Я не могу понять, что делает VideoMemory_GetSharedMemory в данном классе.
Просто создает файл, но не пойму как она его связывает с драйвером?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2015, 16:16   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

эти файлы прошиты в драйвер, судя потому что они уже существуют на момент открытия.
OPEN_EXISTING
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.12.2015, 18:33   #20
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-а-а... Так это и есть мостик... Хитро. Ща попробую.
А вот интересно, почему callback ребята не замутили?
Чего с шаромемой морочиться?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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