如何以编程方式在Outlook搜索文件夹上设置自定义图标?(即Outlook文件夹SetCustomIcon)我正在尝试使用Folder.SetCustomIcon()方法将自定义图标放置在我以编程方式创建的已保存搜索文件夹上。SetCustomIcon()文档非常少,但可以在此处找到以供参考。此外,它期望遍历的对象示例非常稀少。有谁知道如何为文件夹设置自定义图标?这是我到目前为止的代码:searchFolders=inboxFolder.Store.GetSearchFolders();foreach(searchFolders中的Outlook.Folder文件夹){if(folder.Name=="ExpiringRetentionPolicyMail"){folder.ShowItemCount=Microsoft。Office.Interop.Outlook.OlShowItemCount.olShowTotalItemCount;folder.SetCustomIcon(新位图(32,32));//<=--这不起作用,因为它期望stdPicture具有关于如何转换为这种类型的非常稀疏的信息.Globals.ThisAddIn.Application.ActiveExplorer().CurrentFolder=folder;您只需使用PictureDispConverter从图像/图标转到IPictureDisp。这是来自MSDN的示例。这仅适用于Outlook2010+。要在Outlook2013中查看自定义文件夹图标,您需要查看文件夹列表,而不是邮件视图。来自MAPIFolder的SetCustomIconprivatestaticvoidSetCustomIcon(Outlook.MAPIFolderfolder){Iconicon=null;尝试{icon=Properties.Resources.myCustomIcon_16x16;stdole.StdPictureiconPictureDisp=PictureDispConverter.ToIPictureDisp(icon)作为stdole.StdPicture;folder.SetCustomIcon(iconPictureDisp);}最后{icon.Dispose();}}PictureDispConverter(Icon->IPictureDisp,Image->IPictureDisp)publicstaticclassPictureDispConverter{//IPictureDispGUID。publicstaticGuidiPictureDispGuid=typeof(stdole.IPictureDisp).GUID;//将Icon转换为IPictureDisp。publicstaticstdole.IPictureDispToIPictureDisp(Iconicon){PICTDESC.IconpictIcon=newPICTDESC.Icon(icon);返回PictureDispConverter.OleCreatePictureIndirect(pictIcon,refiPictureDispGuid,true);}//将图像转换为IPictureDisp。publicstaticstdole.IPictureDispToIPictureDisp(Imageimage){Bitmapbitmap=(imageisBitmap)?(位图)图像:新位图(im年龄);PICTDESC.BitmappictBit=newPICTDESC.Bitmap(位图);返回PictureDispConverter.OleCreatePictureIndirect(pictBit,refiPictureDispGuid,true);}[DllImport("OleAut32.dll",EntryPoint="OleCreatePictureIndirect",ExactSpelling=true,PreserveSig=false)]privatestaticexternstdole.IPictureDispOleCreatePictureIndirect([MarshalAs(UnmanagedType.AsAny)]对象picdesc,refGuidiid,boolfOwn);privatereadonlystaticHandleCollectorhandleCollector=newHandleCollector("图标句柄",1000);//WINFORMSCOMMENT://PICTDESC是native中的一个联合,所以我们将//为不同的类型定义不同的//“未使用”字段是为了使其大小合适,因为结构在native和最大的//union一样大。privatestaticclassPICTDESC{//图片类型publicconstshortPICTYPE_UNINITIALIZED=-1;publicconstshortPICTYPE_NONE=0;publicconstshortPICTYPE_BITMAP=1;publicconst短PICTYPE_METAFILE=2;publicconstshortPICTYPE_ICON=3;publicconstshortPICTYPE_ENHMETAFILE=4;[StructLayout(LayoutKind.Sequential)]publicclassIcon{内部intcbSizeOfStruct=Marshal.SizeOf(typeof(PICTDESC.Icon));.PICTYPE_ICON;内部IntPtrhicon=IntPtr.Zero;内部int未使用1=0;内部int未使用2=0;内部图标(System.Drawing.Icon图标){this.hicon=icon.ToBitmap().GetHicon();[StructLayout(LayoutKind.Sequential)]publicclassBitmap{内部intcbSizeOfStruct=Marshal.SizeOf(typeof(PICTDESC.Bitmap));内部intpicType=PICTDESC.PICTYPE_BITMAP;内部IntPtrhbitmap=IntPtr.Zero;内部IntPtr.hpal=IntPtr。零;内部int未使用=0;内部位图(System.Drawing.Bitmap位图){this.hbitmap=bitmap.GetHbitmap();}}}}如果您想在VBA中执行此操作,这里是上面的简单版本,即C#学习教程:如何以编程方式在Outlook搜索文件夹上设置自定义图标?(也就是Outlook文件夹SetCustomIcon)分享的全部内容,如果对你有用,需要了解更多C#学习教程,希望大家多加关注——SubChange_mapiRootFolder_Icon()将mapiRootFolder变暗为Outlook.MAPIFolder,将mapiCurrFolder变暗为Outlook.MAPIFolder.ActiveExplorer.CurrentFolder.DefaultMessageClassIfstCurrItemType="IPM.Note"Then'mailItemtypeshttps://msdn.microsoft.com/en-us/library/office/ff861573.aspxSetmapiRootFolder=mapiCurrFolderstFullFolderPath=mapiRootFolder.Name做直到mapiRootFolder.Parent="Mapi"SetmapiRootFolder=mapiRootFolder.ParentstFullFolderPath=mapiRootFolder.Name&""&stFullFolderPathLoopDebug.PrintstFullFolderPathstIconPath="U:OUTLOOKIconsSenticonarchive_sent1.ico"stIconPath="C:Tempiconarchive_sent1.ico"stIconPath="C:Tempiconarchive_sent1.bmpic"LoadPicture(stIconPath)IfNot(mapiCurrFolderIsNothing)然后mapiCurrFolder。SetCustomIconipdMyPicEndIfEndIfEndSub本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
