Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.04.15;
Скачать: CL | DM;

Вниз

Запретить запись с экрана   Найти похожие ветки 

 
Игорь Андреевич   (2009-09-30 12:47) [0]

Мне нужно сделать так, что бы при выполнении программы не было возможности сделать скриншот экрана и запретить запись происходящего на экране (тоесть что бы всякие frapsы и т.д. не работали)


 
brother ©   (2009-09-30 13:04) [1]

если коротко - невыполнимо...


 
Медвежонок Пятачок ©   (2009-09-30 13:13) [2]

> не было возможности сделать скриншот экрана
Всегда будет такая возможность.

>и запретить запись происходящего на экране
Запретить можно.
Только запрет проигнорируют.


 
Дмитрий   (2009-09-30 14:00) [3]

... самый простой способ не увидеть ничего на экране - ничего не выводить на экран, нет изображения - нет проблемы ...


 
Sapersky   (2009-09-30 15:25) [4]

http://delphimaster.net/view/3-1217268666/
[24]


 
DVM ©   (2009-09-30 22:38) [5]


> Игорь Андреевич   (30.09.09 12:47)
>
> Мне нужно сделать так, что бы при выполнении программы не
> было возможности сделать скриншот экрана и запретить запись
> происходящего на экране (тоесть что бы всякие frapsы и т.
> д. не работали)

Можно запустить твою программу вместе с ОС под виртуальной машиной, типа VMWare и сделать скриншот. И никто не сможет запретить.


 
DaysBetweenInt   (2009-09-30 22:49) [6]

> Можно запустить твою программу вместе с ОС под виртуальной
> машиной, типа VMWare и сделать скриншот. И никто не сможет
> запретить.

Но без проблем можно определить, что программа работает под виртуальной машиной и соответственно ...


 
DVM ©   (2009-10-01 00:51) [7]


> DaysBetweenInt   (30.09.09 22:49) [6]


> Но без проблем можно определить, что программа работает
> под виртуальной машиной и соответственно ...

Не думаю, что без проблем.


 
DVM ©   (2009-10-01 00:54) [8]


> DaysBetweenInt   (30.09.09 22:49) [6]

Скажу больше. Во-первых это справедливо только для некоторых виртуальных машин, вот для той же VMWare. Во-вторых это недокумнтированные методы и соответственно точто работает сейчас может перестать работать в след версии машины. А виртуальных машин вагон и маленькая тележка:
http://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD


 
miek   (2009-10-01 10:03) [9]

Можно затруднить снятие скриншота (но только под winXP/win95), если контролировать сообщение WM_PAINT/WM_PRINT. И товарищи правильно говорят - 100% гарантии нет и не будет. Если пользователь видит изображение, его можно будет снять и программно.


 
Игорь Андреевич   (2009-10-01 13:14) [10]

Я понял, спасибо. Скажите тогда пожалуйста, как можно усложнить процесс снятия? Максимум до чего я додумался, это во время запуска программы, таймером с интервалом 1 полностью чистить буфер обмена (защита от всяких printscreen и т.д.).

А возможно ли сделать так, что бы программа запускалась и вся машина замирала, типа как при появлении окна выключения все замирает? Может есть какой-то глобальный freez или че-то в этом духе


 
DVM ©   (2009-10-01 13:19) [11]


> Игорь Андреевич   (01.10.09 13:14) [10]


> типа как при появлении окна выключения все замирает?

Ничего при этом не замирает. Сверху ложится окно на весь экран, которое содержит скриншот рабочего стола и медленно его обесцвечивает.


> Игорь Андреевич   (01.10.09 13:14) [10]

Можно попробовать запускать твою программу на отдельном десктопе, т.е. программа при запуске создает десктоп и на него переключается, там же происходит работа с ней. Это затруднит снятие скриншотов, т.к. они обычно снимаются с десктопа основного. Правда там не будет и проводника и вообще ничего. Даже диспетчер задач там не будет отображаться (он будет на основном десктопе, по крайней мере в XP так было раньше).


 
Игорь Андреевич   (2009-10-01 13:28) [12]

Это очень хорошая идея, спасибо! Мне и не нужно ничего кроме моего изображения на весь экран. Это будет упрощенный чертеж проекта кухни. При чем сделаю так, что посмотреть на него можно будет только 1 раз.

А вы не могли бы более подробно рассказать? Или показать пример создания второго рабочего стола и как заставить программу вывести свое окно именно на него?


 
DVM ©   (2009-10-01 13:34) [13]


> Игорь Андреевич   (01.10.09 13:28) [12]

PrintScreen на новом десктопе кстати работает. И потом изображение из буфера обмена можно забрать. Придется еще чистить буфер или как то блокировать PrintScreen там. Само же создание десктопа несложно, вот:

program Project1;
uses
 desktop in "desktop.pas",  // обязательно первым!!!
 Forms,
 Unit1 in "Unit1.pas" {Form1};
{$R *.res}
begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

unit desktop;

interface

implementation

uses
 windows;

procedure SetDesktop;
var
 hDsk: THANDLE;
begin
 hDsk := CreateDesktop("mydesk",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;
end.


Проверки на результаты функций вставь сам.


 
Игорь Андреевич   (2009-10-01 13:41) [14]

hDsk := CreateDesktop("mydesk",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);

это мы создаем рабочий стол с именем mydesk

SetThreadDesktop(hDsk);
SwitchDesktop(hDsk);


что означают эти функции? Догадываюсь, что одна из них переключает, а вторая?

CloseDesktop(hDsk);

это нужно вставить в form.onClose ? Что бы закрыть созданный рабочий стол перед выходом из мое программы?

initialization
SetDesktop;


не могу вкурить что это

Обьясните плииз)


 
DVM ©   (2009-10-01 13:47) [15]


> это мы создаем рабочий стол с именем mydesk

да


> SetThreadDesktop(hDsk);

Устанавливаем десктоп основному потоку нашего приложения. Иначе свое окно мы там не увидим.


> SwitchDesktop(hDsk);

Переключаемся на этот десктоп и видим там свое окно.


> CloseDesktop(hDsk);

Закрваем хендл. Сам десктоп продолжает жить.


> initialization
> SetDesktop;
>

Это нужно чтобы десктоп к моменту создания нашего окна уже был создан.


 
Игорь Андреевич   (2009-10-01 13:50) [16]

так
> initialization
> SetDesktop;

нужно в onCreate формы писать?


 
DVM ©   (2009-10-01 13:54) [17]


> нужно в onCreate формы писать?

Категорически не нужно это писать в onCreate формы!!! В этот момент форма уже есть, а десктопа нет уже. Готовое окно нельзя перекинуть на другой десктоп насколько я знаю. Окно надо создавать на этом десктопе.

Я же сверху привел рабочий код, создай новый проект, создай новый модуль, сохрани модуль с именем десктоп и вставь первым в uses в файле проекта. В самом модуле напиши все что у меня в примере.


 
DVM ©   (2009-10-01 13:56) [18]


> Игорь Андреевич   (01.10.09 13:50) [16]

Создание десктопа должно происходить до создания объекта Application (так как в нем тоже есть окно скрытое) и надежнее всего десктоп создавать и переключаться на него при инициализации модуля.


 
Игорь Андреевич   (2009-10-01 14:01) [19]

Спасибо, работает)) А как при закрытии формы вернуться обратно? А то у меня воллпейпер на весь экран и все)) Ни на что не реагирует))


 
DVM ©   (2009-10-01 14:52) [20]


> А как при закрытии формы вернуться обратно?

SwitchDesktop очевидно

Странно, но у меня при закрытии программы возвращается прежний десктоп.


 
DVM ©   (2009-10-01 14:55) [21]


> Игорь Андреевич   (01.10.09 14:01) [19]

Как то так:


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.


 
DVM ©   (2009-10-01 14:58) [22]


> Игорь Андреевич   (01.10.09 14:01) [19]

Кстати проверил, средствами программы типа SnagIT, HyperSnapDX снять скриншот с другого десктопа не получилось.


 
Игорь Андреевич   (2009-10-01 15:55) [23]

DVM, спасибо!)) Вам памятник нужно поставить)) Просто и гениально)


 
DaysBetweenInt   (2009-10-01 16:00) [24]

> Мне нужно сделать так, что бы при выполнении программы не
> было возможности сделать скриншот экрана и запретить запись
> происходящего на экране (тоесть что бы всякие frapsы и т.
> д. не работали)


Игорь Андреевич, а обычный фотоаппарат и камеру для этих целей использовать допустимо?
:)


 
Медвежонок Пятачок ©   (2009-10-01 16:10) [25]

При чем сделаю так, что посмотреть на него можно будет только 1 раз.

Он про ТВ-аут забыл и про бытовую видеозаписывающую аппаратуру


 
Игорь Андреевич   (2009-10-01 16:10) [26]

Я про это думал. Это отдельная тема. Тут наверное уж ничего не поделать.


 
Медвежонок Пятачок ©   (2009-10-01 16:12) [27]

а про хдми уже вообще молчу


 
Игорь Андреевич   (2009-10-01 16:26) [28]

Вообще-то эта защита от домохозяек, которые максимум что сделают, это попросят своего сына, который (по их мнению) хорошо разбирается в компьютерах (на самом деле большинство таких "хакеров" максимум умеют грабить корованы), распечатать проект который им на халяву разработает наш конструктор


 
Медвежонок Пятачок ©   (2009-10-01 16:38) [29]

это большая-пребольшая наивность. и про сына и караваны.

если что-то представляет ценность и защищено, то в один миг появляется тематический форум на котором помира делятся своими способами взлома.


 
Игорь Андреевич   (2009-10-01 16:58) [30]

не, у меня не такой масштабный проект. Всего этого и еще немножко моего меня вполне устроит


 
DVM ©   (2009-10-01 18:37) [31]


> DaysBetweenInt   (01.10.09 16:00) [24]


> а обычный фотоаппарат и камеру для этих целей использовать
> допустимо?

Для этого будет применяться метод описанный тут: http://delphimaster.net/view/15-1252279311/


 
Игорь Шевченко ©   (2009-10-01 19:56) [32]

Все, что отображается на экране, может быть скопировано (тем или иным способом). За очистку буфера обмена надо отрывать руки сразу, потом отрывать место крепления рук (какое, надеюсь, не надо пояснять? )

Если домохозяйка распечатает чертеж - ну и пусть распечатает, вреда от этого немного.


 
Leonid Troyanovsky ©   (2009-10-01 21:03) [33]


> Игорь Шевченко ©   (01.10.09 19:56) [32]

> руки сразу, потом отрывать место крепления рук (какое, надеюсь,
>  не надо пояснять? )

В смысле, что место взращивания?
IMHO, потом надо бы более чувствительное.

--
Regards, LVT.


 
Германн ©   (2009-10-02 02:29) [34]


> Если домохозяйка распечатает чертеж - ну и пусть распечатает,
>  вреда от этого немного.
>

Ну да. Домохозяйка ведь не всегда кухарка!
:)


 
Игорь Андреевич   (2009-10-02 13:01) [35]

Домохозяйка украдет проект, который мой конструктор на халяву ей сделает? Шишь ей! :) Убытки  будут мизерные из-за того, что от основных методов копирования чертеж защищен, а людей, которые захотят докопаться до механизма работы будет ОЧЕНЬ мало


 
Игорь Шевченко ©   (2009-10-02 13:09) [36]

Игорь Андреевич   (02.10.09 13:01) [35]

Извиняюсь, что лезу не в свое дело, но

1. Конструктор может не делать на халяву
2. Конструктор может делать на халяву то, что не представляет практической ценности, а служит лишь наметками

В любом случае ограничивать что-либо средствами системы, затея довольно безрезультатная, а если эти ограничения мешают функционированию других приложений (например, через буфер обмена), то и вовсе вредительская.

Лучшим вариантом, на мой взгляд, будет заказ разработки защиты специалисту, каковому специалисту можно будет разъяснить все требования к защите детально, а не спрашивать по форумам.

Удачи!


 
QAZ   (2009-10-02 13:18) [37]

не забывай что то что работает на твоем компе, не будет работать на другом
либо второй десктоп не включица, либо не переключица обратно


 
Игорь Андреевич   (2009-10-02 14:09) [38]

Игорь Шевченко,

1. Клиентов отпугивает когда берут предоплату
2. Наметки тоже стоят денег и времени

Такая защита не мешает функционированию других приложений. Вместо очистки буфера можно сделать перехват print screen или С ПРЕДУПРЕЖДЕНИЕМ заблокировать клавиатуру.

Я лучше сам пока что напишу, так как пока меня устраивает эта система. Если я буду нуждаться в более изощренных методах защиты, то конечно же найму какого-то специалиста.

QAZ,

это все понятно. Но даже простой пдф или джпег может запороться во время пересылки, или у человека глючит редактор просмотра файлов. Плюс этой системы в том, что для файла с проектом не нужен абсолютно никакой редактор. Разве что под МакОС нужно компилировать в дмг а не в ехе. А учитывая что мажоров с Маками не так и много...


 
QAZ   (2009-10-02 14:23) [39]


> пдф или джпег может запороться во время пересылки

это другое, проблемы почты или тупости получателя
но
когда ты пришлеш ЕХЕшник который вызовет глюки в чужем компе
то
ты попадаеш под уголовную ответственость как распространитель вредоносного софта

кроме того не один почтовик с антивиром молча не пропустит почту с ЕХЕ
и получатель даже не станет его открывать


 
Игорь Андреевич   (2009-10-02 14:25) [40]

Запакую в WinRar и все дела.

А перед запуском будет предупреждение что "данная программа работает по технологии..." и т.д. Вся ответственность снимается



Страницы: 1 2 вся ветка

Текущий архив: 2012.04.15;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.01 c
2-1324669937
Drowsy
2011-12-23 23:52
2012.04.15
FireBird 2.5, IBExpert. Ver. 2011.03.04


15-1323290513
Кто б сомневался
2011-12-08 00:41
2012.04.15
Чем лучше черные клавиатуры?


15-1323757703
OW
2011-12-13 10:28
2012.04.15
Вопрос по EurekaLog. В процедуру перехвата заходит 2раза, почему?


15-1323954680
jacksotnik
2011-12-15 17:11
2012.04.15
Скопировать данные с одной таблицы в другую


1-1291134936
tadalex
2010-11-30 19:35
2012.04.15
Размер панели в StatusBar e