Не понимаю как работать с mirror driver'ом.
Сбился в поисках последовательности действий, чтобы понять, что к чему. Исходники VNC очень большие — не разобраться вовек.
Есть ddk 2003 — ставлю.
Пример в папке mirror "просто так" ничего не показывает. Раскомментировал строку "CreateMyWindow...", и поставил MessageBox после создания окна — в окне всё синее.
Что характерно при поисках, обнаруживал как топики со словами "откомпилил ММ пример, всё работает, но...." и далее по тексту, что там его не устраивает; так и топики со словами "данный пример — просто пустышка, нужно многое дописывать ручками".
Итак, вопросы:
1. Пример драйвера в ddk полноценный? На его базе возможно написать аналог радмина?
2. Пример программы, использующей этот драйвер, в ddk законченный? т.е. должен ли он показывать кусок экрана или нет? Просто чтобы знать, что у меня что-то не так как у всех с системой.
3. Каков порядок действий, при подписывании своей программы на изменения экрана? Вначале я так понял идёт это:
========================
1. в реестре проставляем 1 в значении Attach.ToDesktop.
2. выполняем ChangeDisplaySettingsEx — видимо драйвер перечитывает реестр и цепляется к экрану, если там 1.
3. дальше идёт кусок кода:
HDC hdc = CreateDC("DISPLAY",
deviceName,
NULL,
NULL);
printf("hdc1=%d\n",hdc);
// we should be hooked as layered at this point
HDC hdc2 = CreateCompatibleDC(hdc);
printf("hdc2=%d\n",hdc2);
// call DrvCreateDeviceBitmap
HBITMAP hbm = CreateCompatibleBitmap(hdc, 100, 100);
SelectObject(hdc2, hbm);
BitBlt(hdc2, 0, 0, 50, 50, hdc, 0, 0, SRCCOPY);
// delete the device context
DeleteDC(hdc2);
DeleteDC(hdc);
который я видел в примерах и без драйвера (только там было GetDC(0) — с рабочего стола, видимо) — это снимок с нашего mirror-устройства, я так понял. Но вот чего я не понял, так почему, когда я заменяю deviceName на любую другую надпись, всё работает как и работало — разве не должен был CreateDC вернуть 0?
========================
дальше начинается неразбериха — если оповещение драйвером об изменениях происходит через оконные сообщения, то как окно из CreateMyWindow подписывается на эти сообщения? или оповещения рассылаются всем окнам?
В общем, методом тыка ничего не получается выяснить — объясните, пожалуйста, кто-нибудь — как всё это должно работать?