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

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

  1. finder2006

    finder2006 New Member

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

    Flasher Member

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

    KeSqueer Сергей

    Blog Posts:
    0
    Joined:
    Jul 19, 2007
    Messages:
    1,183
    Location:
    Москва
    Логично было бы сверять значение исходного Device Context'а и контекста экрана
     
  4. maxdiver

    maxdiver Max

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

    Sol_Ksacap Миша

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

    SWR New Member

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

    finder2006 New Member

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

    KeSqueer Сергей

    Blog Posts:
    0
    Joined:
    Jul 19, 2007
    Messages:
    1,183
    Location:
    Москва
    finder2006
    1) Да, да
    2) Я бы брал GetForegroundWindow или что-то подобное
     
  9. finder2006

    finder2006 New Member

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

    Rascalspb New Member

    Blog Posts:
    0
    Joined:
    May 19, 2005
    Messages:
    46
    Location:
    СПб
    1 - потому что правильный ответ "да, нет". он не одинаковых даже для двух вызовов последовательных.
     
  11. IceStudent

    IceStudent Active Member

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