Каким образом запретить копирование из окна RichEdit ?

Тема в разделе "WASM.BEGINNERS", создана пользователем Valentin, 13 ноя 2010.

  1. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    Есть текст, графика, фото.
    Каким образом их лучше представить пользователю с защитой от копирования?
    Как вариант отображения информации есть RichEdit control.
    Как в RichEdit запретить копирование?
    Может есть другие варианты в разрешении этой темы?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Valentin
    Задча не имеет решения в юзермоде. Всегда можно получить описатель контекста выбранного для окна и копировать с него себе битмапу. Чтение текста с вашего окна будет выполнено через посредника - разделяемую для всех процессов память шадова(ядерную). Ну принтскрин можно отключить проверив контекст(он подменяется), но также не эффективно.
     
  3. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    Clerk, я понимаю, что без посредника не обойтись.
    А может есть какой-то Wiwer (не RichEdit), который можно применить для этой задачи, даже не обращая внимания на принтскрин?
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Valentin
    Нет. Лишь в ядре эта задача может найти решение, но оно будет весьма сложным.
     
  5. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    Clerk, понятно, спасибо.
     
  6. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Виртуальная машина обломает даже ядерную защиту (PrintScreen на хост машине из ВМ перехватить невозможно). Так что ещё надо пытаться обнаруживать известные ВМ.
     
  7. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    KIV, спасибо.
    Но задача не в том, чтобы у каждого юзера была ВМ, а чтобы он (юзер) не смог копировать информацию с экрана, в котором она отображена.
    Читать-читай, а вот схватить - зюськи.
     
  8. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Так он всё равно сможет копировать путём снятия скриншотов дисплея виртуальной машины :) Даже если каким-то чудом внутри этой машины удастся поперехватывать всё, что имеет отношение к выводу на экран.
     
  9. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Если кому-нибудь очень потребуется, то можно вообще с VGA кабеля всё перехватить. И тут уже не спасёт ничто. Так что защищать изображение, которое выводится от экран от копирования можно только от "не хакеров". Поэтому ИМХО достаточно запретить копирование и PrintScreen штатными средствами. А если человек в состоянии увести данные через разделяемую память, то он способен и запустить в ВМ и, возможно, снять изображение аппаратно. А можно вообще сфоткать экран на хороший фотоаппарат и распознать в FineReader (кстати, для этого даже "хакером" быть не надо). Варианты как этого защититься?
     
  10. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    Речь идет именно не о "хакерах", а об обычных пользователях, которые могут Ctrl+C and Ctrl+V.
    Есть еще идея: где-то в примерах встречал About с движущемся вверх текстом определенной скорости.
    Если кто поможет ссылкой на исходник, буду премного благодарен.
     
  11. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    А если субклассить RichEdit и тупо корячить копируемые в клипборд данные (ну и раскорячивать их для вставки)?
     
  12. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    От таких пользователей хватит простых user-mode защит вроде перехвата PrintScreen и запрета копирования из RichEdit.
     
  13. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    "простые защиты....запрета копирования из RichEdit" где описаны или есть примеры??
     
  14. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Можно в цикле сообщений отбрасывать все сообщения о нажатии Ctrl + C и Ctrl + Ins.
    Это первый вариант который приходит в голову.
    А может быть у RichEdit есть и свои средства. Ведь редактирование запретить можно, так почему бы нельзя запретить копирование?
    От PrintScreen кажется есть какой то ключик в реестре. В крайнем случае подойдёт глобальный хук на клавиатурные сообщения с проверкой клавиши на допустимость. Такой вариант даже в некотором плане лучше - при некорректном завершении приложения блокировка PrintScreen исчезнет, а так пользователь, если не будет недостаточно умным, надолго лишится возможности делать скриншоты.
    Пример блокировки копирования:
    Код (Text):
    1. while (GetMessage(&msg, 0, 0, 0)) {
    2.     TranslateMessage(&msg);
    3.     if (... тут надо проверить, что это не сообщение о нажатии Ctrl + C или Ctrl + V ..) {
    4.         DispatchMessage(&msg);
    5.     }
    6. }
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    KIV
    Получить контекст окна(GetWindowDC()) и скопировать себе битмапу(BitBlt() etc.). На ней будет всё отрисовано.
     
  16. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    KIV,Clerk, спасибо, буду єкспериментировать.
     
  17. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.561
    Адрес:
    Russia
    KIV
    Ппц. Сабклассинг явно придумали не для вас :)
     
  18. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Если человек способен написать такую программу, то он способен и запустить программу в ВМ или даже (при наличии должных технических средств, которые впрочем не настолько сложны, чтобы быть лишь у единиц) снять изображение с VGA кабеля. Причём защиты от последнего не существует (программной).
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    KIV
    Вы можите снять лог с шины, очень в этом сомневаюсь. Тупо пару строк вбить в VB или заюзать какуюнибуть тулзу делающую скрин может каждый школьник. А не в тему писать вы умеете, давайте лучше про хардварные отладчики, виртуалки не интересны. Но у вас есть к ним доступ ?
     
  20. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    Clerk, совсем забыл...
    Лучше позже, чем никогда.
    Вы очень корректно умеете общаться с новичками, за это Вам большое спасибо.
    Я уже нашел решение проблемы.
    За моими плечами масса рабочих эффективных (даже неповторимых) проектов, но я всегда считаю себя новичком.
    Я много знаю в иных практических делах...и пустословие некоторых "умников", которые якобы знают, но не умеют "свое" применить, меня зачастую будоражит.
    За искренность не извиняются, и все сказанное есть не только правда, но и пережитые на этом форуме "кощунства"со стороны тех же "умников".