Outlook 2016 でクリップボードから (ctrlL+c を使用して) コピーされた添付ファイルを取得しようとしています。次のコードは、私が使用するものであり、2016 を除くすべての Outlook バージョンで機能します。 +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 にコピーする正確な方法はありますか。