запрет на создание скриншота

Тема в разделе "WASM.WIN32", создана пользователем finder2006, 6 апр 2008.

  1. finder2006

    finder2006 New Member

    Публикаций:
    0
    Регистрация:
    3 май 2006
    Сообщения:
    18
    Есть такая тулза PrivacyKeyboard. С ее помощью можно запретить создание скриншота. Она перехватывает функции BitBlt и ScratchBlt. Кто-нибудь может объяснить, как она определяет, что эти фуекции вызываются именно для создания скриншота ?
     
  2. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    не логично было бы открыть любой исходник который делает скрин экрана, и глядеть какими параметрами вызываются данные функции ? :)
     
  3. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Логично было бы сверять значение исходного Device Context'а и контекста экрана
     
  4. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
    А вот вопрос в тему.
    Как Windows Media Player и другие плэйеры заменяют картинку чёрным прямоугольником? Они же не перехватывают никаких функций.
     
  5. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Это побочный эффект... Overlay... Аппаратное ускорение... Нечто вероятное этому.
    http://labnol.blogspot.com/2005/11/capture-still-images-from-windows.html
     
  6. SWR

    SWR New Member

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    226
    Адрес:
    Russia
    А он и не заполняет. Показ изображение идет через апаратное окно (Overlay) которое идет поверх всего. И данные в нем напрямую недоступны. А в новых видео картачках даже шифруется (чтоб неграбили)
     
  7. finder2006

    finder2006 New Member

    Публикаций:
    0
    Регистрация:
    3 май 2006
    Сообщения:
    18
    несколько вопросов (извиняюсь если тупые, с графикой не работал почти)
    1. контекст экрана - это то что возвращаете GetDC(0) ? он одинаков для всех процессов ?
    2. как быть если делается копия не всего экрана, а например только одного окна ? перечислять все окна и сравнивать контексты ?
     
  8. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    finder2006
    1) Да, да
    2) Я бы брал GetForegroundWindow или что-то подобное
     
  9. finder2006

    finder2006 New Member

    Публикаций:
    0
    Регистрация:
    3 май 2006
    Сообщения:
    18
    что то я наверное не допонял.
    делаю в программе hdc = GetDC(NULL)
    при разных запусках получаю разные значения, почему ?
     
  10. Rascalspb

    Rascalspb New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    46
    Адрес:
    СПб
    1 - потому что правильный ответ "да, нет". он не одинаковых даже для двух вызовов последовательных.
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Нет, нет. GetDC(0) возвращает контекст текущего дисплея, их может быт несколько (см. SwitchToDesktop). А процессы могут быть прикреплены к различным "станциям окон" (window stations).