Outlook vsto-文件夹限制

Outlook vsto-文件夹限制,outlook,vsto,add-in,Outlook,Vsto,Add In,我有一个小Outlook 2010插件,需要限制自定义文件夹上的某些操作: 我是否可以阻止用户重命名文件夹 是否可以阻止用户将任何项目移动到文件夹中?我知道ItemAdd事件,但这只是在项目已被移动后才会触发。这对我来说太晚了 是否可以禁用文件夹的上下文菜单(右键单击) 非常感谢 //编辑:我想我找到了上下文菜单问题的解决方案。这样做可以吗,还是有缺陷 outlook.FolderContextMenuDisplay+=DisableArchiveFolderContextMenu; pri

我有一个小Outlook 2010插件,需要限制自定义文件夹上的某些操作:

  • 我是否可以阻止用户重命名文件夹
  • 是否可以阻止用户将任何项目移动到文件夹中?我知道ItemAdd事件,但这只是在项目已被移动后才会触发。这对我来说太晚了
  • 是否可以禁用文件夹的上下文菜单(右键单击)
非常感谢

//编辑:我想我找到了上下文菜单问题的解决方案。这样做可以吗,还是有缺陷

outlook.FolderContextMenuDisplay+=DisableArchiveFolderContextMenu;
private void DisableArchiveFolderContextMenu(Office.CommandBar命令栏,MAPIFolder文件夹)
{
if(folder.Name.Equals(Settings.Default.ArchiveFolderName))
{
//禁用关联菜单
commandBar.Enabled=false;
}
其他的
{
commandBar.Enabled=true;
} 
}
查看如何防止用户将项目移动到您的文件夹中。此事件需要附加到您感兴趣的每个文件夹-我知道在ItemMove之前没有全局的
。您必须递归地迭代每个邮箱文件夹,或者锁定并附加您的项目侦听器。
FolderSwitch
有一些限制,因为您仍然可以通过Inspector Ribbon、OWA或EWS在不切换文件夹的情况下移动项目

要防止用户重命名文件夹,可以使用来持久化通过文件夹的上下文父级实现的文件夹名称

public分部类ThisAddIn
{
Outlook文件夹;
Outlook.Folder自定义文件夹;
Outlook.Folders邮箱;
Outlook.Explorer;
私有void ThisAddIn_启动(对象发送方,System.EventArgs e)
{
explorer=Globals.ThisAddIn.Application.ActiveExplorer();
explorer.FolderSwitch+=新建Outlook.ExplorerEvents\u 10\u FolderSwitchEventHandler(explorer\u FolderSwitch);
邮箱=Globals.ThisAddIn.Application.Session.DefaultStore.GetRootFolder().Folders;
if(mailbox.Cast().Where(c=>c.Name==“自定义文件夹”).Count()==0)
{
customFolder=mailbox.Add(“自定义文件夹”)为Outlook.Folder;
Outlook.StorageItem si=customFolder.GetStorage(“自定义文件夹存储”,Outlook.OlStorageIdentifierType.OlIdentifityBySubject);
si.UserProperties.Add(“PermanentFolderName”,Outlook.OlUserPropertyType.olText)。Value=customFolder.Name;//存储持久名称
si.Save();
}
其他的
customFolder=邮箱[“自定义文件夹”]作为Outlook.Folder;
mailbox.FolderChange+=新建Outlook.FoldersEvents\u FolderChangeEventHandler(mailbox\u FolderChange);
}
void explorer_FolderSwitch()
{
folder=explorer.CurrentFolder作为Outlook.folder;//获取新句柄
folder.BeforeItemMove+=新建Outlook.MAPIFolderEvents\u 12\u BeforeItemMoveEventHandler(文件夹\u BeforeItemMove);
}
无效邮箱\u文件夹更改(Outlook.MAPIFolder文件夹)
{
Outlook.Folder Folder=作为Outlook.Folder的文件夹;
Outlook.StorageItem si=folder.GetStorage(“自定义文件夹存储”,Outlook.OlStorageIdentifierType.olIdentifityBySubject);
if(si.Size>0&&si.UserProperties.Count>0&&si.UserProperties[“PermanentFolderName”].Value!=文件夹.Name)
folder.Name=si.UserProperties[“PermanentFolderName”].Value;//覆盖用户名更改
}
作废文件夹\u BeforeItemMove(对象项,Outlook.MAPIFolder MoveTo,ref bool取消)
{
if(MoveTo.Name==“自定义文件夹”)
Cancel=true;//不允许在此处移动项目
}
}

非常感谢!钩住资源管理器的文件夹开关为我做到了这一点!