цвет пиксела полноэкранного приложения

Тема в разделе "WASM.WIN32", создана пользователем Normal, 20 май 2005.

  1. Normal

    Normal New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    7
    Пост в BEGINNERS не принес результатов, поэтому пишу сюда.

    ;---------------------------------------------------

    Вопрос:

    Есть отдельное ПОЛНОЭКРАННОЕ OpenGL (есть вариант его и DirectX) приложение WIN32 (в частности WinXP). Необходимо

    нацарапать другую программку , отслеживающую цвет определенного пиксела на экране при работе энтого приложения (скажем, это игрушка). Есть еще момент. Это пиксел из ТЕКСТОВОЙ СТРОКИ, формируемой в зависимости от внешних данных. Может, можно отловить вызов этой программой wsprintf или SetTextColor или что-то подобное ? Если да, то можете хотя бы натолкнуть на мысль - HOW TO по пунктам?

    Спасибо заранее !

    P.S Прочитал "Перехват API функций в Windows NT (часть 1). Основы перехвата. [Ms-Rem]", но реализация этого - хм...
     
  2. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Какую апи отлавливать надо я не знаю, так как написанием OpenGL приложений не занимался, посмотри это в соответствующих статьях. А о том, как отловить вызов апи читай 2 часть про перехват, в конце дана готовая библиотека для этого.
     
  3. Avalonec

    Avalonec New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    111
    Адрес:
    Тула
    inva_win GetDC,hWndMyMenu

    inva_win GetPixel,eax,10, 10

    eax-цвет
     
  4. Normal

    Normal New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    7
    2Ms Rem . Как я понял, способ, описанный в Вашей статье - единственно возможный ?

    2Avalonec - приложеньице-то чужое. GetDC чей контекст даст ? Да еще ОГЛ. Да еще full-screen,а при потере ФОКУСА тут же на паузу встает. во как . ;/
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Normal



    Что требуется?

    - определять цвет конкретного пикселя на экране;

    или

    - определить текст выводимый на экран;

    Чем больше напишешь о задаче - тем болеше вероятность полезных ответов.
     
  6. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Normal



    Нет конечно, перехватить апи можно еще кучей других способов. Например можно использовать DebugAPI или изменять атрибуту памяти в PTE и работать в драйвере. Способов придумать можно много. Просто описанные способы наиболее просты и практичны в применении.
     
  7. Avalonec

    Avalonec New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    111
    Адрес:
    Тула
    Normal

    М-да...

    Достаешь hwnd ища в процессах или WindowFromPoint.

    GetDC возвращает hdc для окна. Берешь цвет.

    В моих приложения OpenGL и DirectX все берется, что fullscreen, что в окошке.
     
  8. Normal

    Normal New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    7
    2S_T_A_S_ определять требуется событие. Присутствие на дисплее текстовой строки опр. цвета в строго определенном месте говорит о том, что событие имеет место. Больше просто зацепиться не за что.

    2Avalonec я пробовал так, но GetPixel возвращает не то, что есть на дисплее. к сожалению,у меня нет достаточно опыта чтобы узнать почему так происходит.

    Поэтому думаю, что можно SetTextColor перехватывать или Text Out etc...
     
  9. Normal

    Normal New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    7
    Объясню как есть. Знаете игрушку к примеру CounterStrike.

    Прицел на враге. Около прицела - строка красного цвета "blablabla - enemy". Так вот смысл , чтобы ету строку распознать и сгенерить клик мышом или кейдаун. Врезультате - БАХ - попали. ;)

    Это для борьбы с читерками полезно. А модифицировать прогу низзя, так как cервер совместно с чит-админом выкинет из игры.

    P.S. Если бы тока знать сетевой протокол, посредством которого CS работает....все было бы проще.
     
  10. Avalonec

    Avalonec New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    111
    Адрес:
    Тула
    возвращает не то, что есть на дисплее

    Цвет может отличаться и "плавать" от режима 16 бит и 24. Поэтому это надо учитывать.

    Тебе к примеру нужно задать таймер и периодически читать цвет пикселя.



    Нужный COM метод directx ID3DXFont::lol: rawTextA(W).
     
  11. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Normal



    Для начала попробуй в sice поставить бряк на ddraw!DD_Surface_Lock и ddraw!DD_Surface_Unlock4

    если сработают - можно их хучить, и читать пиксели из видеопамяти каждый кадр. Правда придётся почитать про COM и DirectX





    Avalonec >




    Не факт, что используется версия интерфейса DX которая его содержит.
     
  12. Normal

    Normal New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    7
    Спасибо, попробую.
     
  13. Avalonec

    Avalonec New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    111
    Адрес:
    Тула
    S_T_A_S_

    Да не факт, но главное показать направление, а там, при желании, можно дальше копать.
     
  14. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    Normal

    помоему там обыкновенным TextOut это делается, попробуй выловить, прежде чем морочить голову.