1 | |||||||||||
Нерегулярная ошибка при автозагрузке программы: "Cannot create system shell notification icon"02.09.2014, 12:03. Показов 9447. Ответов 33
Метки нет (Все метки)
Здравствуйте!
Ребята, подскажите, по такому вопросу у меня есть программа которая была написана мной ещё 2 года назад. В этой программе я предусмотрел запуск самой программы при старте Windows в свёрнутом в трей виде. Всё бы ничё, но иногда программа вместо нивидимого запуска в трей пишет мне вот такую ошибку (см.скриншот). Как можно исправить это? Кто-нить с этим сталкивался когда-нить? Вот код как устанавливаю автозапуск по нажатию на CheckBox...
0
|
02.09.2014, 12:03 | |
Ответы с готовыми решениями:
33
cannot create shell notification icon Рисуем иконку для Notification.Builder setSmallIcon(int icon) Ошибка при запуске программы Failed to create OpenGL context for format QSurFaceFormat Chrome notification create - русский язык и utf8 System Error - ошибка при компиляции программы. |
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
|
|
02.09.2014, 13:45 | 2 |
CheckBoxClick вообще -по моему опыту- не очень надежная штука. Такое ощущение, что состояние чекбокса меняется "в процессе" работы этой подпрограммы и от этого возникают коллизии (иногда).
0
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
02.09.2014, 13:52 | 3 |
Если изображать Дану Скалли, то не должно быть ничего такого, но лично у меня сложилось впечатление, что он любит изредка сам себя нажимать.
Потихоньку. Ключевое слово иногда. Следовательно надо завести какой-либо лог и везде подряд протоколировать состояние и все изменения. Если нужно быстрое решение, то сменить (а почему бы и не попробовать) данный компонент на какой-либо другой (BitBtn, к примеру).
0
|
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
|
|
02.09.2014, 13:59 | 4 |
ПС кроме того, присваивая ему значение (.. = true), ты запускаешь обработчик OnClick; тот в свою очередь снова лезет открывать ветку реестра... . А операции с реестром - не мгновенные по времени.
0
|
Ушел с форума
|
|
02.09.2014, 15:01 | 5 |
Создавать иконку в трее можно не сразу после автостарта, а спустя некоторое
время, пока оболочка (explorer.exe) не будет полностью проинициализирована. Когда это произойдет, придет оконное сообщение "TaskbarCreated". То же самое случается при перезапуске оболочки. Если не отреагировать на данное сообщение, иконка потеряется.
4
|
02.09.2014, 15:24 [ТС] | 6 |
CheckBox лучше и проще. Тем более данные с рееестра он считывает чтобы поставить сам себя тогда когда я лезу в форму с настройками и при открытии этой формы в событии FormShow он и считывает значение ключа реестра чтобы поставить галочку.
Вот скриншот
0
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|||||||||||
02.09.2014, 16:09 | 7 | ||||||||||
Это не гарантия работоспособности.
Но я вас ни в коем случае не отговариваю от его использования. Но лучше заведите себе булевскую переменную. И вообще, при старте приложения, как советует Убежденный, уходите в ожидание TaskbarCreated, а по его приходу проверяйте состояние своей булевской переменной-приватного члена формы, и уже от этого вот предпринимайте дальнейшие действия (выставление галки в чекбокс, работу с реестром, прорисовку значков в трее и так далее). И еще раз, Sasha, обращаю ваше внимание на тот факт, что лучший и простой CheckBox Положите на форму чекбокс и пропишите, как в вашем примере, ему какую-либо сигнализацию нажатия:
Теперь положите на форму кнопку и пропишите в ней:
В чекбоксе не просто появится флажок, произойдет событие его нажатия. А теперь вернитесь к своему первому посту и еще раз его внимательно просмотрите.
0
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
02.09.2014, 16:37 | 9 |
Возьмите за пример любимый UI класс-перехватчик, переопределите им класс свей стартовой формы так, чтобы она слушала событие TaskbarCreated (через карту сообщений (MESSAGE_MAP)) с помощью какого-либо WaitfFor, и, как только событие придет, продолжала работу.
Или можно попробовать залезть прям в само приложение, а не форму - подредактировать Project.cpp на предмет того же прослушивания.
0
|
02.09.2014, 20:41 | 10 |
Только, я не пойму там ручное создание иконки, или как обычно компонентом? Если компонентом то как бы отпадает "ручное создание".
Добавлено через 3 минуты Это чет вообще даже не понял.
0
|
30.09.2014, 17:36 [ТС] | 11 | |||||
Вот написал обработку сообщения TaskbarCreated. Как Вы думаете так правильно
0
|
02.10.2014, 10:23 [ТС] | 12 | |||||
Как показала практика почему-то не заходит выполнение в функцию WndProc, потому что ShowMessage не срабатывает. Ребята подскажите, пожалуйста, как правильно?
0
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
||||||
02.10.2014, 22:55 | 13 | |||||
Как минимум, на момент выполнения FormCreate сообщение WM_CREATE уже получено.
Собственно оно и вызывает FormCreate. Добавлено через 4 минуты Да и где гарантия того, что на момент создания формы событие TaskbarCreated уже не свершилось? Добавлено через 1 час 44 минуты Так у меня работает:
1
|
03.10.2014, 15:00 [ТС] | 14 |
FIL, Хм... странно сделал код как У вас и ничего больше. Знаю на 100%, что моя программа стоит в автозагрузке и перезагружаю компьютер. Компьютер загружается и я жду в надежде ShowMessage c надписью TaskbarCreated, но почему-то это сообщение не появляется, а открывается сразу моя форма. Что это означает? Это наверно означает, что оконное собщение не пришло на форму или как? Работаю в C++ Builder XE 4
0
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
|
03.10.2014, 15:12 | 15 |
Скорее всего (как я писал выше) на момент запуска приложения событие TaskbarCreated уже произошло.
Для проверки можно выгрузить Эксплорер и запустить его заново.
1
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
|
03.10.2014, 18:20 | 19 |
При запуске пытайся отрисовать иконку с обработкой ошибки.
Если получится, то отрисует, если нет, то отрисует при получении события TaskbarCreated.
1
|
03.10.2014, 18:27 [ТС] | 20 |
Я так понял в событии FormCreate необходимо отловить ошибку создания иконки в трее через try и catch()? Верно я понял?
0
|
03.10.2014, 18:27 | |
03.10.2014, 18:27 | |
Помогаю со студенческими работами здесь
20
Не загружаються настройки с Ini при автозагрузке программы При автозагрузке программы, не восстанавливаются настройки из config.ini Нежелательное мелькание всех форм программы при автозагрузке Ошибка при автозагрузке Как поместить ярлычок программы в Icon Tray при запуске? Не выполняется часть кода при автозагрузке/запуске из другой программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи | |||||
Распознавание изображений (компьютерное зрение) на C++
InfoMaster 20.01.2025
Введение в компьютерное зрение и основы работы с изображениями
Компьютерное зрение представляет собой одну из наиболее динамично развивающихся областей информационных технологий, позволяющую. . .
|
Какой язык программирования лучший для разработки нейронных сетей
InfoMaster 20.01.2025
В современном мире технологий искусственные нейронные сети становятся неотъемлемой частью множества инновационных решений, от распознавания речи до автоматического управления транспортными. . .
|
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
|
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
|
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
|
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
|
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
|
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
|
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
|
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций
История планшетов началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые прототипы,. . .
|
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
|
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы
В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
|