내 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);
}
서명은 어떻게 생겼습니까? –
@MathiasLykkegaardLorenzen 사용중인 ITaskbarList3 서명을 포함하도록 질문을 업데이트했습니다. – ribbons