我正在尝试从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中复制的剪贴板内容。
答案 0 :(得分:0)
我在新安装的Windows 7中尝试了这种情况。安装Windows 7更新后,此问题自动得到解决。