![防止 Windows 资源管理器的拖放操作冻结窗口?](https://linux22.com/image/1248371/%E9%98%B2%E6%AD%A2%20Windows%20%E8%B5%84%E6%BA%90%E7%AE%A1%E7%90%86%E5%99%A8%E7%9A%84%E6%8B%96%E6%94%BE%E6%93%8D%E4%BD%9C%E5%86%BB%E7%BB%93%E7%AA%97%E5%8F%A3%EF%BC%9F.png)
在一些执行不善的软件中(就我而言,iPhone浏览器和MP3增益(但还有其他)将文件/文件夹从资源管理器拖到程序中后,资源管理器窗口将变得不可用,直到程序完成其操作。它无法调整大小、移动或最小化,并且无法与任何按钮或图标交互(光标停留在“放在此处”光标上)。这种情况持续到程序完成其操作为止。是可以打开另一个资源管理器窗口并导航回该窗口,但原始窗口仍然冻结。
需要说明的是,这种情况发生在第三方软件中,这些软件响应创建事件的线程中的拖放操作。在资源管理器中复制文件不会触发此问题。
有没有办法阻止这种行为,以便当程序在自己的线程/进程/其他程序中执行其操作时,我仍然可以与资源管理器窗口交互?我有Windows 7 x64,但据我回忆,这种行为在 XP32 中也存在。
答案1
它是可以修复的*
,但是你必须稍微改变你的工作流程。
您需要的是一个可同时实现拖放功能的辅助应用程序。当文件被拖放到此辅助程序时,它将IDropTarget
复制下拉列表,然后释放资源管理器来执行其他操作。然后,您将从辅助程序拖放到 iPhoneBrowser,这将仅锁定下拉列表的副本,而不会锁定资源管理器使用的原始列表。
通过对助手进行多线程处理,还应该能够避免其在持续时间内被冻结。
*
需要组装。如果你不是程序员,可以找一个程序员做朋友
答案2
我曾经编写过处理文件拖放的程序,并且可以说这种情况只会存在于编写得很差的文件拖放处理程序中。
懒惰的程序员在处理文件时保持下拉列表打开,从而冻结了 Explorer,而不是先从中获取所有放置的文件名,然后关闭列表,以便在进行处理之前释放 Explorer。
答案3
我不确定我是否正确理解了您的问题但您是否考虑过打开第二个资源管理器窗口?
答案4
答案可能有点奇怪,但对于大型复制操作,我倾向于使用 xcopy。是的,我第一次学会如何使用它是在 DOS 6 上。它仍然有效。