Восстановление иконки в системном трее после падения explorer.exe

Восстановление иконки в системном трее после падения explorer.exe

Бывает, что очень маленькие и полезные программы помещают свою иконку в область уведомлений (системный трей), и в принципе, все идет хорошо, до того момента, пока не порушится explrer.exe, а такое с ним хоть и редко, но случается.

После такой неприятности, программа вроде бы и висит в памяти, и даже что-то делает (например как моя микроутилита показывающая температуру в Усть-Каменогорске), но иконка уже не отображается. При этом видно, что некоторые другие программы восстановили свои иконки сразу же при автоматическом запуске explorer.exe. Долгое время руки не доходили заняться этим вопросом, но теперь я знаю как восстановить иконку в трее после падения explorer.exe.

Все оказалось довольно просто. И об этом на сайте MSDN есть подробная информация. Оказывается, что при создании таскбара (и, следовательно системного трея) создается сообщение, которое отправляется всем окнам верхнего уровня. Сообщение называется “TaskbarCreated”, его нужно добавить в свою программу с помощью функции RegisterWindowMessage, которая возвращает существующий номер сообщения, уже зарегистрированного в системе. “TaskbarCreated” как раз такое сообщение.

После чего нужно просто проверять это сообщение в своей программе, и при его получении заново размещать иконку в трее.

В общем, нужно добавить совсем немного в функцию основного окна.

Выглядит это примерно так:

LRESULT CALLBACK WindowFunc ( HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam )
{
	static UINT MessageTaskbarCreated;

	switch(umsg)
	{
		case WM_CREATE:
			MessageTaskbarCreated = RegisterWindowMessage("TaskbarCreated");
		break;

		default:
			if ( umsg == MessageTaskbarCreated )
				AddTrayIcon();
		break;
	}

	return DefWindowProc(hwnd, umsg, wparam, lparam);
}
Статья опубликована на сайте bechtold.biz — 13 сентября 2010 г.
Программы

Оставить комментарий

Да, я человек!