Когда вы копируете картинку или текст, то это заносится в буфер обмена. HiAsm умеете работать с буфером обмена. Он может заносить в него текст/картинку и получать их. А также реагировать на изменения в буфере.
Прежде чем перейти к рассказу о защите от копирования текста в программе, я покажу, как вообще можно работать с буфером в HiAsm. На вкладке "Система" для этого есть компонент Clipboard (группа "Компоненты"). С его помощью можно заносить данные в буфер обмена и читать их из буфера обмена.
В этом примере буфер используется только для текста, но у компонента Clipboard есть и другие точки - для картинки.
Но этот компонент позволяет просматривать буфер обмена лишь по требованию, а не тогда, когда буфер обмена изменяется. На вкладке "Контролы" есть другой компонент - ClipboardHook. Его событие onChange происходит тогда, когда в буфер обмена попадает текст.
Как только вы скопируете текст из многострочного поля, так он сразу отобразится в однострочном. А есть ещё событие onBitmap - происходит, когда в буфер попадает картинка. Вот на этом и будет строиться наша защита от копирования текста из программы.
Как только вы скопируете текст или картинку, разветвитель в программе сразу задействует пустой DoData и занесёт данные из него в буфер обмена как текст. И буфер обмена будет пуст.
Недостаток этого метода в том, что копировать нельзя будет не только из этой программы, но и вообще ниоткуда. Однако защита электронных книг вряд ли лучше. Скорее всего, такие книги просто отлавливают нажатие PrintScreen (но отловить эту клавишу компонентом HiAsm для отлавливания клавиш не получится), а потому их защиту можно обойти. А как - я расскажу в другой раз.
А как отловить нажатие PrintScreen?
ОтветитьУдалитьДааа... Короткое замыкание ClipboardHook из примера bh009.sha намертво блокирует буфер обмена - такая каверза, будучи добавленная в автозагрузку, вызовет панику у Ваших друзей (подруг) и позволит Вам выступить в роли ГУРУ-спасителя.
ОтветитьУдалитьНо стоит ли вообще защищаться от копирования? Как-то это выглядит мелко и несовременно. Или есть ситуации, когда это оправданно? Что на этот счет думает уважаемый Сергей Сергеев?
В примере же написано, что можно защищать от копирования текста свою программу. Разумеется, область применения компонента не ограничивается защитой от копирования.
ОтветитьУдалитьУ меня такой вопрос по поводу Буфера обмена. Сталкнулся с переполнение буфера. Не знаю как решить данную проблема. Я сделал программу которая копирует динамически изменяемый текст с помощью мыши и вставляет текст в редактор строк автоматом при копировании. Но когда проходит неопределённое колличество времени скопированный текст уже не вставляется хотя скопированный текст был именён. Можете построить какой пример урока либо решение данного вопроса
ОтветитьУдалитьВыложите схему (или её часть, где реализована работа с буфером) на какой-либо файлообменник и оставьте тут ссылку на него. Без схемы трудно понять, где именно неполадка.
ОтветитьУдалитьПодскажите как реализовать простую схему, с автоматическим сохранением картинки на рабочий стол, при нажатии кнопки "принт скрин"...смотрел урок, так не чего и получается.
ОтветитьУдалитьА вот так.
ОтветитьУдалитьСпасибо!, пытаюсь понять зачем тут клонирование потока, если точка буфера уже обещает вывод картинки (по идеи имя только задать)...Думаю какие элементы нужны, чтобы файл не перезаписывался при повторном скрине, а сохранялся с другим именем.
ОтветитьУдалитьЕсли в Picture Stream есть в свойствах строка - file Name, то по чему, там нельзя сразу задать имя "рисунок.bmp" и вывести на рабочий стол?...
ОтветитьУдалитьИ где найти урок, чтоб объяснили, что значит цвет точек и линий...
P.S.
Заранее благодарен.
"Если в Picture Stream есть в свойствах строка - file Name, то по чему, там нельзя сразу задать имя "рисунок.bmp" и вывести на рабочий стол?..."
ОтветитьУдалитьИмя-то задать можно, но путь заранее неизвестен, так как для разных пользователей разный путь к рабочему столу. Поэтому сначала компонентом Dir получаем путь к рабочему столу текущего пользователя, а потом уже соединяем его с именем файла.
Чтобы файл не перезаписывался, можно добавлять к имени дату записи, например так.
Цвет точек обозначает тип передаваемых по ним данных. Например, для передачи точки для передачи строк серые, чисел - жёлтые. Но это только верхние и нижние точки, а правые и левые точки всегда зелёные, потому что они более универсальны в плане типов данных. Цвета линий показывают, какие точки связывают линии: верхнюю/нижнюю или правую/левую.
Настроить цвет точек (и линий) можно задать в настройких (Сервис - Настройка - Редактор в HiAsm 4.02 build 179).
"Если в Picture Stream есть в свойствах строка - file Name, то по чему, там нельзя сразу задать имя "рисунок.bmp" и вывести на рабочий стол?..."
ОтветитьУдалитьА PrintScreen захватывает экран в формате BMP? А если нужен JPG, то конвертацию ставить надо?
В Picture Stream нет такой строки в свойствах. По крайней мере, в моей версии HiAsm. Но если у вас есть - можно и так.
ОтветитьУдалитьДа, после PrintScreen в буфере оказывается картинка bmp. Её следует переконвертировать в jpg, если нужен этот формат.