在我的C#Winforms應用程序中,我使用ITaskbarList3::SetOverlayIcon
界面在應用程序的任務欄按鈕(Windows 7下)上設置狀態疊加層。這一切似乎爲我工作得很好,圖標正確顯示和刪除。爲什麼SetOverlayIcon偶爾會拋出一個'無效光標句柄'COMException?
從形式加載事件,我的一個功能,使通話
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 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);
}
你的簽名是什麼樣的? – 2012-08-13 11:00:26
@MathiasLykkegaardLorenzen我已經更新了我的問題,以包含我正在使用的ITaskbarList3簽名。 – ribbons 2012-08-22 18:42:31