【问题标题】:Drag and Drop simulation?拖放模拟?
【发布时间】:2009-08-05 08:08:43
【问题描述】:

我有一个专有应用程序,它是从外部传递数据的唯一方法 - 从其他应用程序拖放(例如从 Windows 资源管理器中拖动文件)。我的问题是,是否可以从外部应用程序模拟拖放?首选纯 win32 解决方案,也可以包含 MFC 和 WTL 等依赖项。 救命!

【问题讨论】:

  • aloneguid:你找到答案了吗?我也有完全一样的问题。如果您发现任何东西,请告诉我 (a_poostchi@yahoo.com)
  • aloneguid:你找到答案了吗?

标签: windows drag-and-drop


【解决方案1】:

我认为这是可能的,但您可能需要 COM(不过我不确定 - 有 WM_DROPFILES 消息和一些相关函数,但我找不到用于删除数据的函数)。请参阅 MSDN 上的 this article

【讨论】:

  • WM_DROPFILES(这是一个用于向后兼容的过时消息)可以使用 SendMessage() 从一个应用程序发送到另一个应用程序,但它仅适用于发送文件名,没有别的。要拖放实际数据,您需要改用 IDropTarget 和 IDataObject 接口。但是,您无法使用它们模拟拖放。外部应用程序必须使用有效的 IDropSource 和 IDataObject 接口调用 DoDragDrop(),然后拖放由用户完成。不能直接访问窗口的 IDropTarget 接口。
  • 应用可以使用 OleSetClipboard() 将 IDataObject 接口放到剪贴板上。然后,Anotehr 应用程序可以使用 OleGetClipboard() 检索它。
  • @Remy,不幸的是,听起来他们无法访问“专有”应用程序的源代码..
  • 没错。抱歉,误解了。没有专有应用程序的来源。它接受来自Windows资源管理器的传入数据作为拖放文件操作,然后处理该文件中的数据,这是所有已知的传递数据的方法。根据 spy++,app 没有收到任何有趣且不相关的信息,只有 WM_MOUSEMOVE、WM_NCHITTEST、WM_MOUSEUP。我将探索 COM 接口,但我根本不是 COM 人:(
猜你喜欢
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
相关资源
最近更新 更多