![]() |
|
|
#1
|
|||
|
|||
|
1.Реализуемо ли это? как я читал, максимум, что можно сделать - запустить в своей области(как второй монитор). Кто что думает?
2)Можно ли обработать захват экрана, чужим приложением? 3) можно ли отвязать хоткей, от приложения чужого? |
|
#2
|
||||
|
||||
|
Да, отдельный десктоп - это реально.
Как-то попадалась прога с анекдотами "палата №6", там защита от каких бы то нибыло способов копирования была простая очистка буфера обмена каждые 100 миллисекунд. Правда это не спасало от программы Spy. |
|
#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)
| ||
|
#8
|
|||
|
|||
|
Снова я, снова по хоткеям. Созданы несколько хоткеев по коду выше и все прекрасно работает, но в одном приложении не хочет. Если оно Активно, то событие WMHotKey не происходит, убираешь фокус - все хорошо. Можно ли что-то сделать? Пробоввал через Msg.WParam, но ничего не дало. Есть идеи?
|
|
#9
|
||||
|
||||
|
Выберите другой хоткей для своей сборки
|
|
#10
|
|||
|
|||
|
Нет, вы не поняли. Хоткеи не пересекаются и не конфликтуют. Менял даже сам идентитификтор на 5ти значный номер, но не помогло. Либо я вас не понял?
|
|
#11
|
||||
|
||||
|
Оффтоп, но по теме:
Цитата:
|
|
#12
|
|||
|
|||
|
Простите, а возможно что в Windows 8 это все не работает? А то я шлю своему приятелю программу, а он просто жмет Print Screen и отсылает мне ScreenShot. То есть вообще не заморачивается...
Обидно... |
|
#13
|
||||
|
||||
|
Есть куча ПО, которое перехватывает клавишу PrintScr и плюет на все запреты по снятию скриншотов.
|
|
#14
|
|||
|
|||
|
Спасибо. Это были самые легкие 20 баксов в моей жизни.
|
|
#15
|
|||
|
|||
|
Так что, никто не знает, почему данный код может не работать в Windows 8?
|