Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.02.2014, 18:07
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию Запрет скриншотов

1.Реализуемо ли это? как я читал, максимум, что можно сделать - запустить в своей области(как второй монитор). Кто что думает?
2)Можно ли обработать захват экрана, чужим приложением?
3) можно ли отвязать хоткей, от приложения чужого?
Ответить с цитированием
  #2  
Старый 05.02.2014, 09:04
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Да, отдельный десктоп - это реально.
Как-то попадалась прога с анекдотами "палата №6", там защита от каких бы то нибыло способов копирования была простая очистка буфера обмена каждые 100 миллисекунд. Правда это не спасало от программы Spy.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 05.02.2014, 17:54
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от nixon232
...2)...
...3)...
2) Смотря чем и как перехватывает, или чистить буфер если через Prt Scr, или тогда ставить ловушку (хук либо внедрять подмену системной GetDeskTopWindow будет бардак) если вот так фоткают десктоп
Код:
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  
Старый 07.02.2014, 00:10
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

1 - Этот модуль видел, про то, что кроме него ничего путного нет, но в моем случае он не выход.
2 - мне бы в идеале не дать заскринить свою форму. от принскрина думаю, что защитить не сложно, а вот всякие там фрапсы...
3 - это вроде регит и анрегит на себя хоткей? или можно и на чужое перекидывать? то есть - видим фрапс - и не даем ему зарегить хоткей.
Ответить с цитированием
  #5  
Старый 07.02.2014, 01:20
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Механизм "горячих" клавиш нужен для того что бы приложение их установившее в системе получало сообщение (в вашем случае 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  
Старый 15.02.2014, 12:29
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

а можно получить список задействованных хоткеев в системе?
Ответить с цитированием
  #7  
Старый 15.02.2014, 12:56
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

*****************************************
Цитата:
Сообщение от Eugie
Я не знаю, как получить список всех hotkey'ев, связанных с объектами Shell. Самый тупой способ - пройтись по всем ярлыкам, вызывая для них IShellLink::GetHotkey(). Очевидно, это будет очень медленно, поэтому предположу, что система дублирует инфу о них в реестре. Где именно - понятия не имею. Но работать это хозяйство может примерно так: при запуске explorer.exe (системный процесс - оболочка Windows) считывает из реестра список всех shell-hotkey'ев и регистрирует их внутри себя через RegisterHotKey(). Теперь все shell-хоткеи пойдут через его очередь и будут обработаны на WM_HOTKEY, т.к. можно считать, что процесс explorer всегда имеется в наличии -обычно его все-таки не убивают

Возможно, все совсем не так. Если у тебя есть время и желание копать дальше - флаг в руки. Узнаешь что-нибудь интересное - поделись информацией.
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
nixon232 (15.02.2014)
  #8  
Старый 26.02.2014, 14:55
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Снова я, снова по хоткеям. Созданы несколько хоткеев по коду выше и все прекрасно работает, но в одном приложении не хочет. Если оно Активно, то событие WMHotKey не происходит, убираешь фокус - все хорошо. Можно ли что-то сделать? Пробоввал через Msg.WParam, но ничего не дало. Есть идеи?
Ответить с цитированием
  #9  
Старый 26.02.2014, 15:01
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Выберите другой хоткей для своей сборки
Ответить с цитированием
  #10  
Старый 26.02.2014, 15:21
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Нет, вы не поняли. Хоткеи не пересекаются и не конфликтуют. Менял даже сам идентитификтор на 5ти значный номер, но не помогло. Либо я вас не понял?
Ответить с цитированием
  #11  
Старый 27.02.2014, 01:38
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Оффтоп, но по теме:
Цитата:
Сообщение от nixon232
Нет, вы не поняли... Либо я вас не понял?
Ну вот что здесь сказать, правда, не знаю... Вы установили почти штатные, разрешённые самими мелкомяконькими прибамбасы в виде горячих баттонов, они прекрасно работают везде, но вот кто-то решил в своей нетленке наплевать на правила (а может так защита реализована) и посредством подмены установок напр. true/false через SystemParametersInfo ломает всю систему. Сносить немедлено и искать аналоги - как говорится, если и третий муж бъёт жену как и предыдущие по тыкве, то виноват скорее всего не мужик, а сама эта морда О-Е) ну или смириться, если это садомазо
Ответить с цитированием
  #12  
Старый 23.03.2014, 11:24
Stepanov Stepanov вне форума
Прохожий
 
Регистрация: 23.03.2014
Сообщения: 11
Версия Delphi: Delphi 3
Репутация: 10
По умолчанию Win 8

Простите, а возможно что в Windows 8 это все не работает? А то я шлю своему приятелю программу, а он просто жмет Print Screen и отсылает мне ScreenShot. То есть вообще не заморачивается...

Обидно...
Ответить с цитированием
  #13  
Старый 23.03.2014, 12:51
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Есть куча ПО, которое перехватывает клавишу PrintScr и плюет на все запреты по снятию скриншотов.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #14  
Старый 23.03.2014, 16:37
Stepanov Stepanov вне форума
Прохожий
 
Регистрация: 23.03.2014
Сообщения: 11
Версия Delphi: Delphi 3
Репутация: 10
По умолчанию

Спасибо. Это были самые легкие 20 баксов в моей жизни.
Ответить с цитированием
  #15  
Старый 24.03.2014, 07:45
Stepanov Stepanov вне форума
Прохожий
 
Регистрация: 23.03.2014
Сообщения: 11
Версия Delphi: Delphi 3
Репутация: 10
По умолчанию

Так что, никто не знает, почему данный код может не работать в Windows 8?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter