|
|
#1
|
|||
|
|||
Запрет скриншотов
1.Реализуемо ли это? как я читал, максимум, что можно сделать - запустить в своей области(как второй монитор). Кто что думает?
2)Можно ли обработать захват экрана, чужим приложением? 3) можно ли отвязать хоткей, от приложения чужого? |
#2
|
||||
|
||||
Да, отдельный десктоп - это реально.
Как-то попадалась прога с анекдотами "палата №6", там защита от каких бы то нибыло способов копирования была простая очистка буфера обмена каждые 100 миллисекунд. Правда это не спасало от программы Spy. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
||||
|
||||
Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject); var DeskTopDC: HDC; DeskTopCanvas: TCanvas; DeskTopRect: TRect; begin DeskTopDC := GetWindowDC(GetDeskTopWindow); DeskTopCanvas := TCanvas.Create; DeskTopCanvas.Handle := DeskTopDC; DeskTopRect := Rect(0, 0, Screen.Width, Screen.Height); Form1.Canvas.CopyRect(DeskTopRect, DeskTopCanvas, DeskTopRect); ReleaseDC(GetDeskTopWindow, DeskTopDC); end; 3) RegisterHotKey/UnregisterHotKey на время выполнения сборки З.Ы. По первому вопросу, насчет нового экрана Код:
unit desktop; interface implementation uses windows; var OldDesktop: THandle; procedure SetDesktop; var hDsk: THANDLE; begin OldDesktop := GetThreadDesktop(GetCurrentThreadId); hDsk:=CreateDesktop("desk",nil,nil,0, DESKTOP_READOBJECTS or DESKTOP_CREATEWINDOW or DESKTOP_CREATEMENU or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALRECORD or DESKTOP_JOURNALPLAYBACK or DESKTOP_ENUMERATE or DESKTOP_WRITEOBJECTS or DESKTOP_SWITCHDESKTOP, nil); SetThreadDesktop(hDsk); SwitchDesktop(hDsk); CloseDesktop(hDsk); end; initialization SetDesktop; finalization SwitchDesktop(OldDesktop); end. Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 05.02.2014 в 18:20. |
#4
|
|||
|
|||
1 - Этот модуль видел, про то, что кроме него ничего путного нет, но в моем случае он не выход.
2 - мне бы в идеале не дать заскринить свою форму. от принскрина думаю, что защитить не сложно, а вот всякие там фрапсы... 3 - это вроде регит и анрегит на себя хоткей? или можно и на чужое перекидывать? то есть - видим фрапс - и не даем ему зарегить хоткей. |
#5
|
||||
|
||||
Механизм "горячих" клавиш нужен для того что бы приложение их установившее в системе получало сообщение (в вашем случае WMHotKey) даже в неактивном состоянии, и получат уведомление что кто-то нажал Alt (VK_MENU) +- PrintScrn (VK_SNAPSHOT) все проги, кому это надо, вернее те, чьи хендлы зареганы как его получатели. Остаётся только в этот момент сделать Clipboard.Clear и буфер будет очищен. Правда ещё один нюанс, если в проге есть другие, напр. "стандартные" хоткеи, тогда надо разрешить базовому обработчику обслужить дальше это сообщение через Inherited, иначе остальные "горячки" перестанут работать
Добавлено немного позже Вот для примера запрет на PrintScrn и Alt+PrintScrn во время выполнения Код:
... private procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY; ... uses clipbrd; procedure TForm1.WMHotKey(var Msg : TWMHotKey); begin if (Msg.HotKey = 101) or (Msg.HotKey = 102) then ClipBoard.Clear; end; procedure TForm1.FormCreate(Sender: TObject); begin RegisterHotKey(Form1.Handle, 101, 0, VK_SNAPSHOT); RegisterHotKey(Form1.Handle, 102, MOD_ALT, VK_SNAPSHOT); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnRegisterHotKey(Form1.Handle, 101); UnRegisterHotKey(Form1.Handle, 102); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 07.02.2014 в 03:25. |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
nixon232 (07.02.2014)
|
#6
|
|||
|
|||
а можно получить список задействованных хоткеев в системе?
|
#7
|
||||
|
||||
*****************************************
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
nixon232 (15.02.2014)
|