как получить информацию о почтовом элементе, который перетаскивается в Outlook 2007

Мое требование - получить подробную информацию об элементах, которые перетаскиваются из Outlook 2007.

Я использовал Windows API для регистрации события перетаскивания в Outlook 2007 следующим образом... (public static extern int RegisterDragDrop(IntPtr hwnd, IOleDropTarget target);) и использовал интерфейс IOleDropTarget для получения информации при возникновении событий перетаскивания.

Вот что я сделал до сих пор

Интерфейс IOleDropTarget

[ComImport, Guid("00000122-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IOleDropTarget
{
    [PreserveSig]
    int OleDragEnter([In, MarshalAs(UnmanagedType.Interface)] object pDataObj, [In, MarshalAs(UnmanagedType.U4)] int grfKeyState, [In, MarshalAs(UnmanagedType.U8)] long pt, [In, Out] ref int pdwEffect);
    [PreserveSig]
    int OleDragOver([In, MarshalAs(UnmanagedType.U4)] int grfKeyState, [In, MarshalAs(UnmanagedType.U8)] long pt, [In, Out] ref int pdwEffect);
    [PreserveSig]
    int OleDragLeave();
    [PreserveSig]
    int OleDrop([In, MarshalAs(UnmanagedType.Interface)] object pDataObj, [In, MarshalAs(UnmanagedType.U4)] int grfKeyState, [In, MarshalAs(UnmanagedType.U8)] long pt, [In, Out] ref int pdwEffect);
}

В случае перетаскивания элемента из Outlook срабатывает следующий метод со всеми параметрами, переданными в метод.

int IOleDropTarget.OleDragEnter(object pDataObj, int grfKeyState, long pt, ref int pdwEffect)
    {           
      retirn 0;
    }

Можно ли получить информацию о перетаскиваемом элементе с помощью pDataObj?

До сих пор я пытался получить информацию об этом объекте, который не дал мне информации о перетаскиваемом элементе.

Type myType = pDataObj.GetType();

Есть ли другие вещи, которые нужно сделать, чтобы получить информацию, которую я хочу?

Примеры кода будут оценены

Спасибо


person Nilaksha Perera    schedule 29.06.2015    source источник


Ответы (1)


Вам нужно получить работающий экземпляр Outlook, а затем получить Выбор объекта из активного окна проводника. Он будет содержать перетаскиваемые данные.

 // Check whether there is an Outlook process running.
 if (Process.GetProcessesByName("OUTLOOK").Count() > 0)
 {
    // If so, use the GetActiveObject method to obtain the process and cast it to an Application object.
   application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
  }

См. раздел как получить и войти в Экземпляр Outlook для получения дополнительной информации.

person Eugene Astafiev    schedule 29.06.2015
comment
Спасибо за ответ Евгений. Можно ли получить информацию о вложениях, которые перетаскиваются с помощью этого метода? - person Nilaksha Perera; 29.06.2015
comment
Попробуйте поиграть с объектом pDataObj, чтобы извлечь любую информацию, позволяющую идентифицировать перетаскиваемый объект. Тогда вы сможете найти соответствующий объект в Outlook. - person Eugene Astafiev; 29.06.2015
comment
Я пытался получить что-то из этого объекта в течение нескольких часов. Я даже пытался разобрать этот объект на объект Outlook.MailItem и некоторые другие типы, которые я могу себе представить. Тем не менее код будет выполняться без каких-либо ошибок, оставляя нулевые значения в переменных. Пример: выполнение следующего кода не приведет к ошибкам, но все же после выполнения переменная будет иметь значение null. Outlook.MailItem mail = pDataObj as Outlook.MailItem; - person Nilaksha Perera; 29.06.2015
comment
Вы не сможете преобразовать объект pDataObj в любой тип Outlook. - person Eugene Astafiev; 29.06.2015
comment
ладно Юджин. Спасибо вам за помощь. я попытаюсь получить что-то из pDataObj =) И я дам вам знать.. - person Nilaksha Perera; 29.06.2015