Как получать сообщения адресуемые чужому окну?

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

  1. Green_DiCk

    Green_DiCk New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2007
    Сообщения:
    338
    217.118.66.101

    Постановка задачи: имеется окно, к нему направляются сообщения. В этом же процессе создается поток, который должен иметь возможность получать сообщения, направляемые окну.

    Если создать поток и вызывать в нем PeekMessage(.. hWnd ..), где hWnd - хэндл главного окна приложения, то сообщения не хватаются, т.к.:
    "PeekMessage retrieves messages for any window that belongs to the current thread"

    Чтобы предупредить вопросы "нахрена вообще такое надо??" отвечу - пишу библиотеку, которая должна обрабатывать события от мыши. Библиотека должна легко комбинироваться с существующими графич. библиотеками (MFC, VCL и др.) А в MFC, VCL процедура обработки сообщений окна скрыта под капотом поэтому модифицировать ее под свои нужды не представляется возможным.

    Какие предложения будут?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Я же тебе уже советовал убрать из библиотеки зависимость от ввода.
    На крайняк сделай метод установки новой позиции, типо SetPos(x, y), хоть это тоже кривовато. Пускай само приложение решает, что ему делать, и как у него организуется ввод.
     
  3. Green_DiCk

    Green_DiCk New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2007
    Сообщения:
    338
    217.118.66.101

    >Я же тебе уже советовал убрать из библиотеки зависимость от ввода.

    тссс...)))
    Может есть выходы. А то очень неудобно будет юзать библиотеку. По кривому я всегда успею сделать.

    Я даже нашел что-то похожее на то, что мне нужно. Ф-ция AttachThreadInput(). Удалось приаттачить свой поток к главному. Но сообщения все равно не ловятся.
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Это как раз не криво, а нормально. Не дело библиотеки лезть в ввод. А если таких библиотек будет много, и все будут туда лезть? А если в приложении сделана хитрая обработка сообщений, они не будут мешать друг другу? Как раз логичнее в цикле вызвать метод библиотеки, чем затем разгребать проблемы.
     
  5. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Что-то слышал о перехватчике сообщений (Hook_что_то_там), например Spy++ так работает. Ничего другого не знаю.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Например в играх вообще бывают отключены сообщения, и мышь делается своим способом.
     
  7. Green_DiCk

    Green_DiCk New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2007
    Сообщения:
    338
    217.118.66.101

    >А если таких библиотек будет много

    Исключено. На приложение создается один экземпляр класса движка. Зачем может понадобится больше я даже представить не могу.

    >А если в приложении сделана хитрая обработка сообщений, они не будут мешать друг другу?

    А вот это действительно вопрос... Я озадачился. Пожалуй что придется таки вынести ввод наружу.
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Ну а если ещё другая, сторонняя библиотека будет юзаться? И все они будут лезть в очередь?
     
  9. Green_DiCk

    Green_DiCk New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2007
    Сообщения:
    338
    217.118.66.101

    Booster
    Все, все. Теперь осознал. Спс.