В моем приложении C # Winforms я использую интерфейс ITaskbarList3::SetOverlayIcon
для установки наложений статуса на кнопке панели задач приложения (под Windows 7).Мне кажется, все это работает нормально, значки отображаются и удаляются правильно.
Из события загрузки формы одна из моих функций делает вызов
SetOverlayIcon(parentForm.Handle, IntPtr.Zero, String.Empty)
(где parentForm - этоформа, для которой было запущено событие загрузки), которая очень редко (на машинах других людей) выдает следующее исключение:
System.Runtime.InteropServices.COMException (0x8007057A): Invalid cursor handle. (Exception from HRESULT: 0x8007057A)
at MyNamespace.TaskbarNotify.ITaskbarList3.SetOverlayIcon(IntPtr hwnd, IntPtr hIcon, String pszDescription)
Из базы пользователей, насчитывающей около тысячи пользователей (разных версий Windows)об этом сообщалось примерно 100 раз за пару месяцев.
Я знаю, что IntPtr.Zero
не является допустимым дескриптором курсора, но MSDN сообщает , что NULL является допустимым значением для передачидля hIcon
.Любые предложения относительно того, что Windows говорит мне?
Я использую .NET 2 на случай, если что-то изменится.
Вот определение, которое я использую в своем приложении для ITaskbarList3:
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF")]
public interface ITaskbarList3
{
void HrInit();
void AddTab(IntPtr hwnd);
void DeleteTab(IntPtr hwnd);
void ActivateTab(IntPtr hwnd);
void SetActivateAlt(IntPtr hwnd);
void MarkFullscreenWindow(IntPtr hwnd, bool fFullscreen);
void SetProgressValue(IntPtr hwnd, ulong ullCompleted, ulong ullTotal);
void SetProgressState(IntPtr hwnd, TBPFLAG tbpFlags);
void RegisterTab(IntPtr hwndTab, IntPtr hwndMDI);
void UnregisterTab(IntPtr hwndTab);
void SetTabOrder(IntPtr hwndTab, int hwndInsertBefore);
void SetTabActive(IntPtr hwndTab, int hwndMDI, TBATFLAG tbatFlags);
void ThumbBarAddButtons(IntPtr hwnd, uint cButtons, THUMBBUTTON[] pButton);
void ThumbBarUpdateButtons(IntPtr hwnd, uint cButtons, THUMBBUTTON[] pButton);
void ThumbBarSetImageList(IntPtr hwnd, IntPtr himl);
void SetOverlayIcon(IntPtr hwnd, IntPtr hIcon, [MarshalAs(UnmanagedType.LPWStr)] string pszDescription);
void SetThumbnailTooltip(IntPtr hwnd, [MarshalAs(UnmanagedType.LPWStr)] string pszTip);
void SetThumbnailClip(IntPtr hwnd, NativeMethods.RECT prcClip);
}