Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > как запретить PrintScreen?


Автор: MaxB 15.9.2004, 17:40
как в MFC перекрыть возможность захвата окна кнопкой PrintScreen или специализированными программами например Corel Cepture?

Автор: S.A.P. 15.9.2004, 22:50
Как в MFC не знаю на в API перехватывается примерно вот так:
Инициализация
Код

RegisterHotKey(hwnd, 101, 0, VK_SNAPSHOT);

обработчик сообщения
Код

if (Message == WM_HOTKEY)
if ((int)wParam==101)
//меры по предотвращению

завершение работы
Код

UnRegisterHotKey (hwnd, 101);

Автор: Coocky 15.9.2004, 22:59
Цитата
как в MFC перекрыть возможность захвата окна кнопкой PrintScreen или специализированными программами например Corel Cepture?

Ну просто батенька.Перехвати в PreTranslateMessage() сообщение WM_KEYDOWN,и проверь код нажатой клавиши(см. таблицу кодов).Если это клавиша VK_SNAPSHOT (кажется) ,можно RETURN,или че душе угодно smile.gif

Автор: _hunter 16.9.2004, 10:21
а ника ты не запретиш потому как в IrfanView ( например ) используется Ctrl+F11 ( и можно менять )

смотри в сторону оверлеев

Автор: Coocky 16.9.2004, 22:36
Цитата
а ника ты не запретиш потому как в IrfanView ( например ) используется Ctrl+F11 ( и можно менять )

Ну пусть перехватит все возможные комбинации smile.gif

Автор: MaxB 17.9.2004, 16:20
Благодарен за советы. Но тот кто захочет сделать захват экрана, тот сделает, например с помощью программы Corel Cepture, там можно поставить для этого любую клавишу.

У меня прога создаёт всякие оригинальные рисунки и я хочу выпустить демо версию с отключёным экспортом и сохранением результатов работы и быть увереным что ни кто не будет её использовать по полной программе.

Тут надо лесть в принципы захвата и перекрывать их программно а не кнопку ловить. Может кто знает?

Автор: shedon 17.9.2004, 17:48
ИМХО, надо капать в сторону перехвата апи функций, клавиши бессмыслено перехватывать...

Автор: _hunter 17.9.2004, 19:21
я же тебе говорил -- смотри на оверлеи ( попробуй сделать ПринтСкрин в том же BSPlayer' e -- ни фига не скопируеш )

Автор: lynx_916 17.9.2004, 22:46
Цитата(MaxB @ 17.9.2004, 15:20)
У меня прога создаёт всякие оригинальные рисунки и я хочу выпустить демо версию с отключёным экспортом и сохранением результатов работы и быть увереным что ни кто не будет её использовать по полной программе.

лучше чтавь клеймо на рисунки.

Автор: Атос 18.9.2004, 09:03
Цитата(_hunter @ 17.9.2004, 19:21)
я же тебе говорил -- смотри на оверлеи ( попробуй сделать ПринтСкрин в том же BSPlayer' e -- ни фига не скопируеш )


Ни фига не скопируешь? Попробуй отключить функции ускорения графики - и все прекрасно скопится ;) Это кстати, работает даже для доморощенных реализаций оконной 3D-графики без WM_PRINTWINDOW

Так что действительно, надо ставить клеймо - что-то вроде перечеркнутого рисунка и надписи ядовитым голубым цветом "UNREGISTERED" посередки. smile.gif

Вообще, как обычно делается сдирание экрана? Открывается дексриптор декстопа:
Код

HDC hdcDesktop = CreateDC("DISPLAY", NULL, NULL, NULL); // как вариант -  GetWindowDC(NULL);
HDC hdcCapture = CreateCompatibleDC(hdcDesktop);
HBMP hbmpCapture = CreateCompatibleBitmap(hdcDesktop, GetDeviceCaps(hdcDesktop, HORZRES), GetDeviceCaps(hdcDesktop, VERTRES));
SelectObject(hdcCapture, hbmpCapture);
BitBlt(hdcCapture, 0, 0, GetDeviceCaps(hdcDesktop, HORZRES), GetDeviceCaps(hdcDesktop, VERTRES), hdcDesktop, 0, 0, SRCCOPY));

.... вуаля, картинка декстопа (без мыши ессесно) у нас в кармане...

Надо проанализировать этот код, и найти слабое место...

Имхо, не очень надежный конечно способ защититься от сдирания картинки для другого потока - создать свой декстоп (CreateWindowStation(), CreateDesktop(), OpenDesktop, AssignDesktop()) - чтобы когда граббер сдирал декстоп, то сдирал свой декстоп, а наш - хи-хи, сидит на другом декстопе с другим контекстом smile.gif правда, этот метод сработает только для NT-систем....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)