2010-07-18 9 views
0

내 C# Winforms 응용 프로그램에서 응용 프로그램의 작업 표시 줄 단추 (Windows 7에서)에 상태 오버레이를 설정하기 위해 ITaskbarList3::SetOverlayIcon 인터페이스를 사용하고 있습니다. 이 모든 아이콘이 제대로 표시되고 제거되면서 제대로 작동하는 것 같습니다. 폼로드 이벤트에서 왜 SetOverlayIcon은 '잘못된 커서 처리'COMException을 가끔 throw합니까?

내 기능 중 하나는 호출을

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 버전)의 사용자 기반에서 2 개월 동안 약 100 회 이상보고되었습니다.

IntPtr.Zero은 유효한 커서 핸들이 아니지만 hIcon에 전달할 유효한 값은 NULL임을 나타내는 MSDN says입니다. Windows에서 내게 어떤 제안을하고 있습니까?

차이점이있을 경우 .NET 2를 사용하고 있습니다.

[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); 
} 
+0

서명은 어떻게 생겼습니까? –

+0

@MathiasLykkegaardLorenzen 사용중인 ITaskbarList3 서명을 포함하도록 질문을 업데이트했습니다. – ribbons

답변

0

당신은 당신을 위해이 모든 것을 처리하는 Windows API Code Pack를 사용한다 : 여기

내가 ITaskbarList3 내 응용 프로그램 내에서 사용하고 정의입니다.

+0

내 응용 프로그램이 GPL 라이센스이므로 Windows API 코드 팩을 포함시키지 않으려합니다. 또한 코드 팩은 동일한 인수를 사용하여 동일한 메서드를 호출하므로 예외 처리가 추가되지 않으므로 동일한 결과가 나타날 것으로 예상됩니다. – ribbons

관련 문제