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

Discussion in 'WASM.WIN32' started by finder2006, Apr 6, 2008.

  1. finder2006

    finder2006 New Member

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

    Flasher Member

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

    KeSqueer Сергей

    Blog Posts:
    0
    Логично было бы сверять значение исходного Device Context'а и контекста экрана
     
  4. maxdiver

    maxdiver Max

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

    Sol_Ksacap Миша

    Blog Posts:
    0
    Это побочный эффект... Overlay... Аппаратное ускорение... Нечто вероятное этому.
    http://labnol.blogspot.com/2005/11/capture-still-images-from-windows.html
     
  6. SWR

    SWR New Member

    Blog Posts:
    0
    А он и не заполняет. Показ изображение идет через апаратное окно (Overlay) которое идет поверх всего. И данные в нем напрямую недоступны. А в новых видео картачках даже шифруется (чтоб неграбили)
     
  7. finder2006

    finder2006 New Member

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

    KeSqueer Сергей

    Blog Posts:
    0
    finder2006
    1) Да, да
    2) Я бы брал GetForegroundWindow или что-то подобное
     
  9. finder2006

    finder2006 New Member

    Blog Posts:
    0
    что то я наверное не допонял.
    делаю в программе hdc = GetDC(NULL)
    при разных запусках получаю разные значения, почему ?
     
  10. Rascalspb

    Rascalspb New Member

    Blog Posts:
    0
    1 - потому что правильный ответ "да, нет". он не одинаковых даже для двух вызовов последовательных.
     
  11. IceStudent

    IceStudent Active Member

    Blog Posts:
    0
    Нет, нет. GetDC(0) возвращает контекст текущего дисплея, их может быт несколько (см. SwitchToDesktop). А процессы могут быть прикреплены к различным "станциям окон" (window stations).