Register a global hook to detect whether mouse dragging files/text
我知道可以为鼠标移动、按钮单击、滚动等注册全局挂钩,但我想知道是否有任何方法可以检测用户是否真的使用全局挂钩拖动文件或文本(或其他内容)。
在这上面似乎找不到任何东西。
它不是由Windows消息处理的,即使需要一个消息循环才能使其工作。经典的COM要求。从registerDragDrop()开始阅读以查看管道。
值得注意的是,UAC的uipi方面阻碍了D+D从非提升的进程到提升的进程。changeWindowsMessageFilter()是常见的解决方法,它不适用于d+d。不知道解决方法。
- 该应用程序不需要升级权限(请原谅这家酒吧,但在windroplr.com上观看视频了解我正在努力实现的目标)。我想要的是-而不是拖动到托盘图标与所有涉及的黑客-一旦我检测到鼠标拖动的东西,某处,使拖放目标可见。这件事有可能发生吗?我的意思是,即使我必须深入了解win-api,我只需要一些指针就可以开始了。我在.NET上只有三个多星期的经验,所以…我甚至不知道什么是com:s
- 这与全球挂钩无关,只是一个最顶层的窗口。很容易使用Windows窗体:stackoverflow.com/questions/68598/…
- 拖放到窗体/窗口中的内容是小菜一碟。我只想在鼠标实际拖动某个东西时,显示拖放目标/窗口(默认情况下是隐藏的),在其他任何地方-其他窗口、桌面等。因此引用了全局挂钩。
- 你做不到这一点。很明显,这不是那个视频给你看的。坠落目标清晰可见。
- 这个应用程序是我的,我非常清楚视频显示的是什么。我把它链接起来,这样你就可以看到它在做什么,这样你就可以更好地了解我真正想要它做什么。所以你说在Windows中不可能检测到某种拖放开始的时间?
- 这件事怎么样?msdn.microsoft.com/en-us/library/bb774215(v=vs.85).aspx
- @布鲁诺:该消息仅适用于使用SHCreateShellFolderView()在用户界面中获取和嵌入标准shell文件夹视图窗口,然后从该窗口到另一个窗口执行D+D操作的情况。它不是一个通用消息,通知您系统上任何地方的任何D+D操作。
对不起,没有钩子。
您可能需要使用全局钩子将一个DLL注入到每个正在运行的进程中,然后该DLL可以手动重定向每个进程的导入表中的DoDragDrop()和SHDoDragDrop()函数。当调用重定向函数时,您可以让DLL根据需要通知主应用程序。