Момент времени, в которое было отправлено оконное сообщение

Тема в разделе "WASM.BEGINNERS", создана пользователем Nouzui, 17 мар 2007.

  1. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Наверняка уже обсуждалось, но я не нашел
    Вообще это время возвращается функцией GetMessage в MSG::time, однако подавляющая часть сообщений передается непосредственно оконной процедуре, не вызывая возврата из GetMessage. Функция GetMessageTime() для таких сообщений не предназначена. В функцию ловушки для WH_CALLWNDPROC время тоже не передается.
    Тогда как это время можно узнать?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Nouzui
    я знаю только r0 способ, очень извратный.
     
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    давай )
     
  4. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Nouzui
    Вообще-то передача сообщения непосредственно оконной процедуре заключается в её вызове без всяких очередей, так что время отправки и время получения совпадают ==> GetTickCount на входе оконной процедуры рулит :)
    Только что проверил - для тех сообщений, что идут через GetMessage поле msg.time тоже полностью совпало с тем, что показала GetTickCount на входе :)
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Y_Mur
    я имел в виду из другого потока
    GetMessage извлекает мессаг из очереди, но не возвращается, а вызывает WndProc
     
  6. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    И где же ты хочешь получить время отправки?
    в WndProc ?, при вызове GetMessage? или при вызове SendMessage ?
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Y_Mur
    время, когда сообщение было добавленно в очередь

    а вообще все это тому, что у всех программ треевая менюшка показывается не рядом со значком трея, а рядом с указателем мыши. иногда, при тормозах, указатель мыши может находиться от трея достаточно далеко.. думаю, все это наблюдали
    вот я и задумался, неужели нельзя вычислить положние указателя на момент щелчка?

    ps: где получать - по фиг
    только не надо предлагать сплайсить SendMessage в explorer'е
     
  8. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.351
    MSG.pt ?
     
  9. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    rmn
    и WM_USER в частности
    в принципе, можно воспользоваться мессагой, которая проходит через цикл, но чисто теоретически интересно узнать, как реализовать сабж
     
  10. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    кстати, нет такой мессаги..
    все, что послано SendMessag'ом, приводит к вызову оконной процедуры без возврата из GetMessage'а - только сейчас узнал
    так как же выяснить время, когда такое сообщение было добавленно в очередь потока?
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Потому что координат у значка нет, а положение курсора берётся обычно из GetCursorPos. Соответственно, когда пришло сообщение, тогда координаты и получаются.
     
  12. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    IceStudent
    это я понимаю )
    вопрос стоит в том, как получить позицию курсора на момент вызова SendMessage, а не на момент обработки в WndProc
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Подозреваю, что в общем случае никак. Хотя, можешь посмотреть исходники, может, что и натолкнёт на мысль.
     
  14. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    угу..
    на мой взгляд, существенная недоработка мелософт