如何获取正在Outlook 2007上拖动的邮件项目的信息

本文关键字:拖动 信息 项目 2007 Outlook 何获取 获取 | 更新日期: 2023-09-27 18:00:09

我的要求是获取有关从outlook 2007中拖动的项目的详细信息。

我已经使用一个windows API在Outlook 2007上注册拖放事件如下。。。(public static extern int RegisterDragDrop(IntPtr hwnd, IOleDropTarget target);),并使用CCD_ 2接口在拖放事件发生时检索信息。

以下是我到目前为止所做的

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();

为了得到我想要的信息,还有其他事情要做吗?

将赞赏代码示例

感谢

如何获取正在Outlook 2007上拖动的邮件项目的信息

您需要获取正在运行的Outlook实例,然后从活动资源管理器窗口获取Selection对象。它将包含拖动的数据。

 // 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实例。