2016-05-03 3 views
1

Я пытаюсь получить скопированное вложение (через 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.

ответ

0

Я пробовал этот сценарий в недавно установленных окнах 7. Эта проблема автоматически исправлялась после установки обновлений для окон 7.

Смежные вопросы