我正在尝试从 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 中复制剪贴板内容。