как да получите информация за пощенски елемент, който се влачи в Outlook 2007

Моето изискване е да получа подробности за елементите, които се изтеглят от Outlook 2007.

Използвах API на Windows, за да регистрирам събитие за плъзгане в 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 и след това да получите Selection от активния прозорец на Explorer. Той ще съдържа изтеглените данни.

 // 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 и някои други типове, които мога да си представя. Все пак кодът ще се изпълни без да хвърля грешка, оставяйки нулеви стойности в променливите. Пример: Изпълнението на следния код няма да изведе грешки, но все пак променливата ще остане нула след изпълнение. 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