Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2012.04.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
Игорь Андреевич   (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 вся ветка

Форум: "WinAPI";
Текущий архив: 2012.04.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.004 c
15-1323693258
stas
2011-12-12 16:34
2012.04.15
подключение через VPN


2-1324469524
Шел мимо решил зайти
2011-12-21 16:12
2012.04.15
Button.Caption и цикл


3-1249042437
avn72
2009-07-31 16:13
2012.04.15
Проблема с кодировкой DBF при подключении через ADO


1-1291528318
Дмитрий С
2010-12-05 08:51
2012.04.15
ObjComAuto.TObjectDispatch и методы с 3+ вариант-аргументами.


9-1191431019
Pa5ha
2007-10-03 21:03
2012.04.15
Глюк в анимации смд





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский