1

我正在尝试从 Outlook 2016 中的剪贴板获取复制的附件(通过 ctrlL+c)。以下代码是我使用的代码,适用于除 2016 之外的所有 Outlook 版本。当用户通过 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 中复制剪贴板内容。

4

1 回答 1

0

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

于 2016-05-05T02:50:19.707 回答