какие виндовые сообщения?

Тема в разделе "WASM.WIN32", создана пользователем Relic, 29 авг 2008.

  1. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    посылаются окну при нажатии Win-D (свернуть все окна) и Win-L (блокировка компа)?
     
  2. patolog

    patolog New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    49
    а ты сделай окошко, и в WndProc лог веди куда складывай все мессаги что придут. там и глянеш
     
  3. Gnil

    Gnil New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2008
    Сообщения:
    41
    Spy++ показывает, что message-и к окну (notepad) не приходят.
     
  4. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    Gnil
    Но как-то же окна получают уведомление о сворачивании и скрытии при блокировке?

    Как вообще отловить эти моменты?
     
  5. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Не каждому окну, а окну рабочего стола.
    По Win+D рабочий стол "выезжает" на передний план, поэтому нет необходимости перечиснять все окна и отсылать каждому сообщение. Хэндл рабочего стола = 0.
     
  6. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    Хорошо, это понятно.
    А что насчет Win-L?
     
  7. Gnil

    Gnil New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2008
    Сообщения:
    41
    Только при Win-L не сообщений.При Win-D сообщения приходят: WM_WINDOWPOSCHANGING, WM_WINDOWPOSCHANGED.

    Можно попробовать SetWindowsHookEx c WH_CBT для Win-L.
     
  8. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Ошибочка. Хэндл вообще не может быть нулевым.

    Могу ошибиться, но кажись он не куда не "выезжает". Просто те окна, которые "могут" свернуться - сворачиваются и фокус устанавливается на ListView на рабочем столе.
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Twister
    Именно выезжает ;) - если окно зависло и ничем его не свернёшь, то всё равно оно будет скрыто ;)
     
  10. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Думаю что это сообщение ловит explorer.exe и вызывает LockWorkStation из user32.dll.

    Код (Text):
    1. #define INVALID_HANDLE_VALUE 0xFFFFFFFF
    2. #define HWND_DESKTOP 0
    (или DESKTOP_HWND, не помню)
    Да все сворачиваются, вроде, даже те, что Always on top.
     
  11. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    HWND_DESKTOP
    =)

    Термин "свернуть все окна" и впрямь не совсем верен.
    Правильнее было бы "вывесить рабочий стол на передний план".
     
  12. Gnil

    Gnil New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2008
    Сообщения:
    41
    ::GetDesktopWindow() возвращает handle окна декстопа. HWND_DESKTOP можно использовать, например, как parent window в ::CreateWindow.
     
  13. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Насчет WIN+D: подробно разобрано, например, на rsdn WIN API Q&A

    Насчет Spy++ и "Могу ошибиться, но кажись": зря, что ль, постил сюда Прицеп к Spy++ ? :) Вполне же наглядно.

    кстати, HWND_DESKTOP = 0
     
  14. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Спасибо, исправленно.

    Он, кажется, со времён перевода 98й идёт.
    Сейчас у меня написанно "Показать рабочий стол"(в меню) :)
    А сам ярлык так и остался.