是否可以区分通过拖放和通过附件菜单按钮添加的附件
Is it possible to distinguish between attachments added with drag and drop and via the attachment menu button
我有一个处理电子邮件附件的 outlook 加载项。我有自己的功能区按钮来添加附件,但我想捕获通过拖放添加的附件,同时忽略使用标准附件按钮添加的附件。
实现 ItemEvents_10_BeforeAttachmentAddEventHandler() 很容易,但我不知道如何区分通过拖放和附件菜单按钮添加的附件。
这可能吗?
是否可以自己直接处理拖放事件?
OOM 在这里帮不了你。
理论上,您可以覆盖 Outlook drag/drop 处理程序。
- 使用
IOleWindow
接口获取Inspector的window句柄(您可以将Inspector
object转换为IOleWindow
)。
- 使用
GetProp(hwnd, "OleDropTargetInterface")
Windows API 获取现有的 drag/drop 处理程序 - 将返回值转换为 IDropTarget
接口。您可能需要试验检查器的哪个 child window 是您想要的 drag/drop 目标。
- 调用
RevokeDragDrop
/ RegisterDragDrop
传递您自己的 IDropTarget
实现。然后,该实现可以(在完成您需要做的事情之后)调用原始 IDropTarget
接口,让 Outlook 继续执行默认行为。
我可能找到了一种方法来区分通过拖放和通过附件菜单按钮添加的附件,而无需覆盖 drag/drop 处理程序。
当通过拖放添加附件时,Outlook 应用程序不在前台,因此它没有活动 window。
在我的 BeforeAttachmentAdd() 事件处理程序中,我执行了以下测试:
IntPtr hWnd = GetActiveWindow();
if (hWnd == IntPtr.Zero) {
// Handle drag and drop attachment
}
我有一个处理电子邮件附件的 outlook 加载项。我有自己的功能区按钮来添加附件,但我想捕获通过拖放添加的附件,同时忽略使用标准附件按钮添加的附件。
实现 ItemEvents_10_BeforeAttachmentAddEventHandler() 很容易,但我不知道如何区分通过拖放和附件菜单按钮添加的附件。
这可能吗?
是否可以自己直接处理拖放事件?
OOM 在这里帮不了你。 理论上,您可以覆盖 Outlook drag/drop 处理程序。
- 使用
IOleWindow
接口获取Inspector的window句柄(您可以将Inspector
object转换为IOleWindow
)。 - 使用
GetProp(hwnd, "OleDropTargetInterface")
Windows API 获取现有的 drag/drop 处理程序 - 将返回值转换为IDropTarget
接口。您可能需要试验检查器的哪个 child window 是您想要的 drag/drop 目标。 - 调用
RevokeDragDrop
/RegisterDragDrop
传递您自己的IDropTarget
实现。然后,该实现可以(在完成您需要做的事情之后)调用原始IDropTarget
接口,让 Outlook 继续执行默认行为。
我可能找到了一种方法来区分通过拖放和通过附件菜单按钮添加的附件,而无需覆盖 drag/drop 处理程序。
当通过拖放添加附件时,Outlook 应用程序不在前台,因此它没有活动 window。
在我的 BeforeAttachmentAdd() 事件处理程序中,我执行了以下测试:
IntPtr hWnd = GetActiveWindow();
if (hWnd == IntPtr.Zero) {
// Handle drag and drop attachment
}