在我的C#Winforms应用程序中,我使用ITaskbarList3::SetOverlayIcon
界面在应用程序的任务栏按钮(在Windows 7下)设置状态覆盖。这一切似乎对我来说都很好,图标被正确显示和删除。
从表单加载事件中,我的一个函数进行调用
SetOverlayIcon(parentForm.Handle, IntPtr.Zero, String.Empty)
(其中parentForm是load事件触发的形式),偶尔(在其他人的机器上)抛出以下异常:
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 says 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);
}