WinXP зажёвывает иконку...

Тема в разделе "WASM.WIN32", создана пользователем rav, 19 сен 2006.

  1. rav

    rav New Member

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

    При старте системы WinXP иногда не показывает в трее иконку моего приложения. Видимо, система таскбара ещё не полностью стартовала в момент вывода. RegisterWindowMessage("TaskbarCreated") не работает - оно срабатывает только при перезапуске explorer'а. Поиск здесь и в MSDN не принёс результата. Нужна привязка вывода к полной инициализации таскбара. Может, кто-нибудь может подсказать решение проблемки?
     
  2. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    rav
    После старта процесса explorer.exe, дождаться появления окна соотв. у него таксбару.
     
  3. DLag

    DLag New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2006
    Сообщения:
    14
    В цикле FindWindow.
    Класс ToolbarWindow32.
    Удачи.
     
  4. rav

    rav New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    159
    Адрес:
    Москва
    Код (Text):
    1.         HWND hWndTop=NULL;
    2.  
    3.         do{
    4.  
    5.             hWndTop=FindWindow(_TEXT("Shell_TrayWnd"),NULL);
    6.  
    7.             hWndTop=FindWindowEx(hWndTop,NULL,_TEXT("TrayNotifyWnd"),NULL);
    8.  
    9.             hWndTop=FindWindowEx(hWndTop,NULL,_TEXT("SysPager"),NULL);
    10.  
    11.             hWndTop=FindWindowEx(hWndTop,NULL,_TEXT("ToolbarWindow32"),NULL);
    12.  
    13.             Sleep(200);
    14.  
    15.         }while(!hWndTop);
    Всё равно иногда зажёвывает. Я что-то делаю неправильно?
     
  5. Guest

    Guest Guest

    Публикаций:
    0
    Может это глюк системы у меня тоже Касперский невсегда появляется. Может поробовать что-нибудь иное типа IsWindowVisible или подобное? Попробовать пересоздать иконку через 15 секунд после инициализации таскбара - тоже вариант, то есть после твоего кода добавить:
    sleep(10000);
    DestroyWindow(..)
    CreateWindow(..)