Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.147.77] |
|
Сообщ.
#1
,
|
|
|
Как запретить копирование экрана (клавиши PrnScr, Alt+PrnScr) на время вызова твоей программы?
Пробовал открыть OpenClipboard(hWndNewOwner) и коварно не закрывать. Тот же Word действительно, перестает работать с Clipboard. Но стоило зайти в Far и сделать там Ctrl+Ins в редакторе, как все везде начинает опять копироваться. |
Сообщ.
#2
,
|
|
|
Ловить PrintScreen и не дать ей нажаться.
|
Сообщ.
#3
,
|
|
|
Ловить клавишу и блокировать можно в своей очереди, а как это сделать для любых выполняющихся в это время задач, т.е. для разделяемого ресурса "клавиатура"?
PS Я тут, пока суть да дело, вроде, сам себе ответил уже про ClipBoard: вставил обработчик на WM_DRAWCLIPBOARD и на каждый приход делаю закрыть-открыть-почистить. Теперь и хитрый Far побеждаю. Вопрос в том, можно ли и здесь меня обойти, т.е. получить копию моего окна каким-либо способом? |
Сообщ.
#4
,
|
|
|
Цитата AlexRezn, 07.05.03, 08:43:56 Вопрос в том, можно ли и здесь меня обойти, т.е. получить копию моего окна каким-либо способом? Легко! примерно так: <br>// prepare the DCs<br>HDC dstDC = ::GetDC(NULL);<br>HDC srcDC = ::GetWindowDC(hwnd); //full window (::GetDC(hwnd); = clientarea)<br>HDC memDC = ::CreateCompatibleDC(dstDC);<br> <br>// copy the screen to the bitmap<br>HBITMAP bm =::CreateCompatibleBitmap(dstDC, sz.cx, sz.cy);<br>HBITMAP oldbm = (HBITMAP)::SelectObject(memDC,bm);<br>::BitBlt(memDC, 0, 0, sz.cx, sz.cy, srcDC, xshift, yshift, SRCCOPY);<br> |
Сообщ.
#5
,
|
|
|
Цитата AlexRezn, 07.05.03, 08:43:56 Ловить клавишу и блокировать можно в своей очереди, а как это сделать для любых выполняющихся в это время задач, т.е. для разделяемого ресурса "клавиатура"? Хук. |
Сообщ.
#6
,
|
|
|
To SONG:
Перехват (в смысле не пустить к другим) сообщений в цепочке действует на остаток цепочки после тебя. Не уверен, исполняет ли операционная система, скажем, PrnScr до или после отработки сообщения всеми стоящими в цепочке, и, вообще, "стоит ли она сама в этой очереди" (т.е. какова корреляция между отработкой горячих клавиш операционной системой и оповещением ею очереди пользовательских обработчиков сообщений?) To e-Yes: GetWindowDC (GetDC) Parameters hWnd: Identifies the window with a device context that is to be retrieved. Т.е., чтобы скопировать в своей программе мой экран Вы должны знать hWnd моей программы. Его можно получит через EnumWindows. Выходит, что защитить экран своей программы от копирование в принципе не возможно (вопреки эпиграфу SONGa)? |
Сообщ.
#7
,
|
|
|
Цитата AlexRezn, 08.05.03, 04:29:44 To SONG: Перехват (в смысле не пустить к другим) сообщений в цепочке действует на остаток цепочки после тебя. Не уверен, исполняет ли операционная система, скажем, PrnScr до или после отработки сообщения всеми стоящими в цепочке, и, вообще, "стоит ли она сама в этой очереди" (т.е. какова корреляция между отработкой горячих клавиш операционной системой и оповещением ею очереди пользовательских обработчиков сообщений?) Если реализацию хука сделать в dll-ке, такой хук будет подсоединяться ко всем процессам и тут будет совершенно не важно до или после. |
Сообщ.
#8
,
|
|
|
Цитата AlexRezn, 08.05.03, 04:29:44 Выходит, что защитить экран своей программы от копирование в принципе не возможно (вопреки эпиграфу SONGa)? Думаю, что не возможно. А Сонг только про защиту от PrintScreen'а сказал. |
Сообщ.
#9
,
|
|
|
Я имел ввиду эпиграф "Прежде чем сказать "невозможно", подумай, прав ли ты?"
Ладно, ребята, спасибо! Нет, так нет... |