Глюк с иконкой с Systray

Тема в разделе "WASM.BEGINNERS", создана пользователем ATX, 11 фев 2008.

  1. ATX

    ATX New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    145
    Доброго времени суток!

    Такая проблемка возникла - моя прога далжна отображать в systray-е состояние своей работы.
    Под одним пользователем все работает нормально, но если зайти другим юзером (через Switch User) то начинаются проблемы!
    Иконка почему-то не перерисовывается и имеет серый цвет + вся покоцаная.
    Как решить эту проблемку?
     
  2. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    ATX
    Скажем, может у другого юзера глубина цветов на десктопе меньше стоит?
    А вообще по-моему в 37 строчке кода ошибка у тебя.
     
  3. Yashin

    Yashin New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2008
    Сообщения:
    19
    к 41 строке лучше приглядись, там по-моему ты перерисовку не поставил.
     
  4. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    KeSqueer, Yashin
    Вы прикалываетесь, а автор реального совета просит. Нет чтобы написать, дай код или хотя бы поподробнее...
     
  5. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    ATX
    А иконка-то сама еще валидная? Может стоит ее пересоздавать?
     
  6. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Xerx
    А разве у всех юзеров может одно гуйное приложение так сразу работать? Я думал нужно у каждого свое запускать. Но тогда они на равных правах работают.
     
  7. ATX

    ATX New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    145
    Естественно у каждого юзера запускается свой экземпляр приложения (иначе и небывает) и картинка тоже валидная:)
    Такая хрень происходит если переключаться между юзерами, хотя я как временное решение поставил перерисовку иконки по таймауту и она получается нормальная.
    Но это не решение траблы :-(
     
  8. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    все же нужно код посмотреть. Каким образом идет отрисовка?
     
  9. ATX

    ATX New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    145
    Что ты понимаешь под отрисовкой?
     
  10. ATX

    ATX New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    145
    1. в начале я устанавливаю иконку в систрей:
    mov note.cbSize,sizeof NOTIFYICONDATA
    push hWnd
    pop note.hwnd
    mov note.uID,IDI_TRAY
    mov note.uFlags,NIF_ICON+NIF_MESSAGE+NIF_TIP
    mov note.uCallbackMessage,WM_SHELLNOTIFY
    mov eax,hSystrayON
    mov note.hIcon,eax
    invoke Shell_NotifyIcon,NIM_ADD,addr note
    2. если в программе меняется событие, я перерисовываю иконку на другую
    mov eax,hSystrayOFF
    mov note.hIcon,eax
    invoke Shell_NotifyIcon,NIM_MODIFY,addr note

    Да, в w2k иконка всегда серая показывается :-(

    Что еще нужно сделать?
     
  11. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    ATX
    поставил перерисовку иконки по таймауту ... Но это не решение траблы
    Taskbar Creation Notification?
     
  12. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    ATX
    это я имел в виду.

    Ну, ХЗ. Проверь основное:
    1) В этом случае note должна быть глобальной структурой.
    2) Если note все же локальная структура, не следует ставить NIF_TIP, когда подсказка не заполняется.
    3) WM_SHELLNOTIFY >= WM_USER

    При "перерисовке" иконки используется тот же хендл, или заново загружается иконка?

    4) Попробуй вот это:
     
  13. ATX

    ATX New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    145
    1. note - глобальная структура
    2. пробовал к с NIF_TIP, так и без (результат отсталя неизменен)
    3. При перерисовке использую тот же хендл.

    Короче "а во и ныне там", как я понимаю траблу, нужно после повторного входа в акаунт перерисовывать иконку.
    Только не понятно как отслеживать этот момент!?
     
  14. ATX

    ATX New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    145
    q_q, спасибо!

    Это хорошее решение, но проблема в том что описываемая на MSDN технология срабатывает только при полном уничножении и перезапуске explorer.exe.
    В данном случае, к сожалению не подходит.
    Т.к. при session unlock - explorer.exe просто продолжает работу!

     
  15. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    ATX
    WTSRegisterSessionNotification -> WM_WTSSESSION_CHANGE -> WTS_SESSION_UNLOCK?
     
  16. ATX

    ATX New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    145
    Сенькс q_q!

    WTSRegisterSessionNotification тоже не годится, т.к. оно только - Requires Windows Vista or Windows XP.
    А оно еще и на w2k должно работать :-(