从Outlook 2016中的剪贴板中复制Outlook附件

时间:2016-05-03 06:01:22

标签: c# clipboard outlook-addin outlook-2016

我正在尝试从Outlook 2016中的剪贴板获取复制的附件(通过ctrlL + c)。以下代码是我使用的,并且除了2016之外的所有Outlook版本都可以使用。当用户模拟a时,将调用此方法通过CTRL + C复制。

void GetClipBoardFiles()
{                
            // Getting the outlook process id using windows API
            int outlookProccessId = GetProcessCurrent();
            // getting the clipboard process id using windows API
            IntPtr hwndClipboardOwner = GetClipboardOwner();
            //  getting owners process id of clipboard using windows API
            uint processClipboardOwner = GetProcessFromWindowHandle(hwndClipboardOwner);

            // If clipboard owner and outlook process id is equal, this copy is done within outlook.
            if (outlookProccessId == processClipboardOwner)
            {
                string[] fileNames = null;
               // Check for the available files details in clipboard 
                if (Clipboard.ContainsFileDropList())
                {
                   // my custom code.
                }
             }
}

以上代码在outlook 2003,2007,2010和2013中运行良好,但对于Outlook 2016,有时此代码不起作用。即使在outlook中模拟ctrl + C,剪贴板的所有者进程ID也与outlook进程id不匹配。即使它匹配,Clipboard.ContainsFileDropList()方法返回false,而我可以真正粘贴我复制到某个文件夹或桌面的内容。 它与Outlook 2016的新行为有关吗?有没有准确的方法来获取在Outlook中复制的剪贴板内容。

1 个答案:

答案 0 :(得分:0)

我在新安装的Windows 7中尝试了这种情况。安装Windows 7更新后,此问题自动得到解决。