Я пытаюсь получить скопированное вложение (через ctrlL + c) из буфера обмена в Outlook 2016. Следующий код - это то, что я использую и функционально для всех версий Outlook, за исключением 2016. Это метод вызывается, когда пользователь имитирует копию через CTRL + C.Получить скопированное приложение Outlook из буфера обмена в Outlook 2016
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.
}
}
}
Приведенный выше код работает отлично в прогноз 2003,2007,2010 и 2013, но для Outlook, 2016, иногда этот код не работает. Несмотря на то, что ctrl + C моделируется в Outlook, идентификатор процесса владельца буфера обмена не совпадает с идентификатором процесса outlook. Даже он соответствует, Clipboard.ContainsFileDropList()
метод возвращает false, в то время как я действительно могу вставить содержимое, которое я скопировал в какую-либо папку или на рабочий стол. Как это связано с новым поведением Outlook 2016? есть ли какие-либо точные способы получить содержимое буфера обмена, скопированное в Outlook.