Почему убегает иконка из сис.трея?

Тема в разделе "WASM.BEGINNERS", создана пользователем strange2007, 24 ноя 2010.

  1. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Добрый день. Задаю мегабестолковый вопрос по причине, что два дня не могу найти проблему. Если кто с первого раза увидит ошибку, пните меня в нужную сторону.
    Создаю иконку в сис.трее, она там появляется. Стоит мне только навести курсор на неё, она тут же исчезает. Как это может быть?
    Вот код создания:

    Код (Text):
    1. ; Подготовка структуры иконки
    2.     mov dword ptr [NoteIcon.cbSize], sizeof NOTIFYICONDATA
    3.     push    dword ptr [hSrvMainWnd]
    4.     pop dword ptr [NoteIcon.hwnd]
    5.     mov dword ptr [NoteIcon.uID], UID_ICON_SYS_TRAY
    6.     mov dword ptr [NoteIcon.uFlags], NIF_ICON + NIF_MESSAGE
    7.     mov dword ptr [NoteIcon.uCallbackMessage], WM_SHELLNOTIFY
    8.     mov esi, dword ptr [hInst]
    9.     push    IDI_ICON2
    10.     push     esi
    11.     call    LoadIcon
    12.     mov dword ptr [NoteIcon.hIcon], eax
    13.     mov dword ptr [NoteIcon.szTip], 0
    14.     push    offset NoteIcon
    15.     push    NIM_ADD
    16.     call    Shell_NotifyIcon
    17.     test    eax, eax
    18.     jz  lm_CrIcSyTr1_2
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.561
    Адрес:
    Russia
    strange2007
    Код обработки сообщений для вашей иконки - покажите.
     
  3. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Не тот код приводишь. Это создание иконки - оно, очевидно, прекрасно отрабатывает - иконка появляется. А вот когда наводишь и иконка исчезает - значит она выгружается. С закрытием, возможно, программы. А возможно и нет. Надо смотреть, где ты ее грохаешь. И как.
     
  4. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Вот такой

    Код (Text):
    1.         mov     eax, Message
    2. .....
    3. lm_MaSrWiPr1_6:
    4.     cmp eax, WM_SHELLNOTIFY
    5.     jne lm_MaSrWiPr1_7
    6.         ; Обработка активации иконки
    7.         ;----------------------------
    8.         cmp WParam, UID_ICON_SYS_TRAY
    9.         jne lm_MaSrWiPr1_3          ; сообщение не от основной (единственной) иконки
    10.         cmp LParamL, WM_RBUTTONDOWN
    11.         jne lm_MaSrWiPr1_9
    12.         ; Правая кнопка мыши, т.е. вывод меню
    13.         xor eax, eax
    14.         jmp lm_MaSrWiPr1_2            ; команда обработана
    15. lm_MaSrWiPr1_9:
    16.         xor eax, eax
    17.         cmp LParamL, WM_LBUTTONDOWN
    18.         jne lm_MaSrWiPr1_3            ; обработчик по умолчанию
    19.         ; Левая кнопка мыши
    20.         jmp lm_MaSrWiPr1_2
     
  5. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Туда даже не заходит исполнение кода. Такое ощущение, что иконка сразу убивается, только криво.
     
  6. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Окно программы открыто. Какие могут быть признаки закрытия кроме NIM_DELETE или закрытия приложения?
     
  7. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Нужен кусок, где вы делаете вот это: Shell_NotifyIcon(NIM_DELETE, &nid)
     
  8. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Угу, такого нет!!!!!! Я его еще не добавлял, потому что не работает создание
     
  9. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Во!!!!!!!! После обработки
    Код (Text):
    1.     push    offset NoteIcon
    2.     push    NIM_ADD
    3.     call    Shell_NotifyIcon
    EAX=1 (это нормально), иконка при этом появляется и не продолжая выполнения, т.е. в отладчике застопорен код после выполнения команды. Можно подвестимышь к иконке и она исчезает. Такое ощущение, что она создается и тут-же убивается
     
  10. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Тогда вот это: jne lm_MaSrWiPr1_3 ; обработчик по умолчанию
    Что за обработчик? Надеюсь, вы не передаете сообщения от иконки в трее в DefWindowProc?
     
  11. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Теперь вопрос немного можно изменить:
    Что нужно сделать такого, что бы иконка создавалась и тут-же при создании убивалась? Может в заполнении структуры дело? Строка
    mov dword ptr [NoteIcon.szTip], 0
    на это не может повлиять?
     
  12. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    FatMoon
    это как раз и есть, разве так нельзя?
     
  13. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    ну-ну-ну, застопорен... а брекпоинт на WinProc или DlgProc (не знаю, что там у вас и под какими именами) ставили?

    А зачем? И что будет (что должен) сделать стандартный обработчик с вашей иконкой?
     
  14. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    FatMoon
    Неее, причина не в этом, только что проверил. К тому же иконка убивается еще задолго до этого кода. Она пропадает сразу после создания
     
  15. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    в смысле оконная процедура? Да, ставил. WM_SHELLNOTIFY вообще не передается ей
     
  16. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    нда, легче весь код выложить или экзешник приложить ;)
     
  17. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Эээээммммм... уважаемый, FatMoon, Вы уверены, что это поможет? Он большой. Если считаете это нормальным, тогда сейчас сделаю. Только скажите как здесь выложить
     
  18. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    если большой, то не надо. Тогда сделайте ма-аленькую версию с кучей заглушек, основное назначение которой - вывести иконку в трей. По тому, что приведено, проблем не видно
     
  19. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    О! Точно! Сейчас проверю. 5 сек...
     
  20. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Готово. Ни чего сам не понимаю. Как прикрепить?