Как получить оконное сообщение не имея в программе окна.

Тема в разделе "WASM.BEGINNERS", создана пользователем _sheva740, 26 мар 2009.

  1. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Добрый день.
    Как обработать очередь системных сообщений не имея самого окна.
    Это возможно?
     
  2. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    а при чем тут окно?

    msg_loop:
    invoke GetMessage,msg,NULL,0,0
    cmp eax,1
    jb end_loop
    jne msg_loop
    invoke TranslateMessage,msg
    invoke DispatchMessage,msg
    jmp msg_loop
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    assorted
    Спасибо. Вот уж эти стереотипы. Нужна ведь только процедура!
     
  4. VictorV79

    VictorV79 New Member

    Публикаций:
    0
    Регистрация:
    26 мар 2009
    Сообщения:
    130
    В смысле прозрачное окно что ли
    обработка инфы в окне только, что бы окна не было
     
  5. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    VictorV79
    Нет не прозрачное. Окно просто не создается.

    В данном случае нужно создать поток. В потоке "создаю" очередь сообщений с помощью PeekMessage():
    Код (Text):
    1. ...
    2. MSG msg;
    3. PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);
    4. PostThreadMessage(GetCurrentThreadId(), WM_USER, 2, 3);
    5. GetMessage(&msg, NULL, 0, 0);
    6. printf("Got a message 0x%x for hwnd = 0x%x",msg.message, msg.hwnd);
    7. ...
    ... вот так и получим наше сообщение WM_USER, 2, 3.
     
  6. G13

    G13 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2006
    Сообщения:
    499
    _sheva740, это не стереотипы. :)

    Начнём с того, что сообщения посылаются окну. Второй параметр GetMessage - hWnd, хэндл окна. Если там ноль - GetMessage возвращает сообщения для окон, принадлежащих текущему потоку (ну, и переданные через PostThreadMessage).

    Для отлова системных сообщений есть специальный вид окон - message-only windows. Поищите по форуму, уже поднимали эту тему.
     
  7. elestrago

    elestrago New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2009
    Сообщения:
    56
    когда то давно я сталкивался с такой проблемой, мне нужно было отловить таймер в потоке, если память не подводит то есть функция которая якобы регистрирует невидимое окно!! пороюсь по своим исходникам если найду выложу! :)
     
  8. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    G13
    elestrago
    Спасибо.