拖动应用程序外的有效放置目标时的事件?

时间:2014-09-03 12:14:56

标签: c# wpf .net-4.5

我有一个非常简单的方法可以在本地写入文件,但是我只想在用户看起来要放弃应用程序之前解雇它,因为每次开始拖动都会触发它会导致大量不必要的文件写作。

所以我的问题是:如果用户在应用程序之外的应用程序中拖动某些东西,是否可以检测它们何时拖动有效的放置目标(例如桌面或Windows资源管理器)?

编辑:在更一般的层面上,我的问题是:我如何回应我的应用 之外的鼠标/拖动事件?

3 个答案:

答案 0 :(得分:3)

不完全确定你是在做什么,但这可能有所帮助:

WPF: Drag and drop virtual files into Windows explorer

在大多数情况下,拖放事件应该触发,无论你在哪里(我认为),但你可以在执行掉落时得到通知。

正如@Quarzy所说,除非您与其他应用程序进行通信,否则可能没有直接的方法来测试基础窗口拖放系统不会暴露的数据。

更具体地说,这个问题指向了这篇文章:http://blogs.msdn.com/b/delay/archive/2009/11/04/creating-something-from-nothing-asynchronously-developer-friendly-virtual-file-implementation-for-net-improved.aspx

我发布这个纯粹是因为我想知道它是否可能导致其他事情,除了你可能能够在光标下获得控件的Hwnd - 可能http://social.msdn.microsoft.com/Forums/windows/en-US/3df9fc84-4020-4ae1-8b4f-942bce65568f/find-the-object-under-the-mouse?forum=winforms作为起点。

然后可能有办法通过互操作来查询该特定控件是否是有效的放置目标。

祝你好运!

答案 1 :(得分:3)

这可能是您问题的可能答案:Register a global hook to detect whether mouse dragging files/text

以下建议可能有所帮助(要求您创建c ++外部库):

  1. 捕获其他可能的进程窗口消息(全局钩子WH_GETMESSAGE)(请参阅此链接How to Create a global WH_GETMESSAGE HOOK without DLL
  2. 收听WM_DROPFILES
  3. 请参阅以下链接:http://www.experts-exchange.com/Programming/Languages/CPP/Q_10203575.html

答案 2 :(得分:2)

你在这里也有一个帮助答案How can I capture mouse events that occur outside of a (WPF) window?

但是我没有看到任何方法来检测目标是否有效,只要你没有与潜在目标进行沟通。