如何获取在 Outlook 2007 上被拖动的邮件项目的信息
how to get information of a mail Item which is being dragged on 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();
是否还有其他方法可以获取我想要的信息?
代码示例将不胜感激
谢谢
您需要获取 运行 Outlook 实例,然后从活动资源管理器 window 获取 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;
}
有关详细信息,请参阅 How to: Get and Log On to an Instance of Outlook。
我的要求是获取有关从 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();
是否还有其他方法可以获取我想要的信息?
代码示例将不胜感激
谢谢
您需要获取 运行 Outlook 实例,然后从活动资源管理器 window 获取 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;
}
有关详细信息,请参阅 How to: Get and Log On to an Instance of Outlook。