Как сказал DavidHeffernan, вы должны инициализировать ноль вашей data
структуры (вы должны ВСЕГДА начинать с нуля любую структуру, которую вы передаете в функцию Win32 API), например:
NOTIFYICONDATA data = {0};
Или:
NOTIFYICONDATA data;
ZeroMemory(&data, sizeof(data));
Таким образом, любые неиспользуемые поля имеют согласованные и предсказуемые значения.В вашем случае, когда вы вызываете NIM_DELETE
, вы не инициализируете data
, поэтому его поле uFlags
будет содержать случайные биты, что может привести к неправильной интерпретации Shell_NotifyIcon()
содержимого вашего NOTIFYICONDATA
и к ошибке, иТаким образом, ваша иконка не удаляется.