返回
如何解决 Windows 文件资源管理器打开时出现的 OBJ.PutInclipboard 问题?
windows
2024-03-09 19:41:48
在 Windows 文件资源管理器打开时解决 OBJ.PutInclipboard 问题
问题概述
在 Windows 文件资源管理器打开时,可能会遇到使用 OBJ.PutInclipboard 方法将数据放入剪贴板时出现的问题。该问题是由文件资源管理器对剪贴板的独占访问引起的。
修复方法
修复方法 1:使用 Shell.Run
一种解决方案是使用 Shell.Run 函数关闭文件资源管理器,然后将数据放入剪贴板:
Dim OBJ As New DataObject
Dim txt As String
txt = "This goes in clipboard"
OBJ.SetText txt
Shell.Run "explorer.exe /select,", vbHide
OBJ.PutInClipboard
修复方法 2:使用 SendKeys
另一种解决方案是使用 SendKeys 方法发送键击以关闭文件资源管理器窗口并放入数据:
Dim OBJ As New DataObject
Dim txt As String
txt = "This goes in clipboard"
OBJ.SetText txt
SendKeys "%{F4}"
SendKeys "%{ESC}"
OBJ.PutInClipboard
修复方法 3:使用 VBA 关闭文件资源管理器并保存窗口位置
如果需要关闭所有打开的文件资源管理器窗口并保存其位置,可以使用以下 VBA 代码:
Dim shellWindows As Object
Dim windowLocations As Collection
Set shellWindows = GetObject("Shell.Application").Windows
Set windowLocations = New Collection
For Each window In shellWindows
If window.Name <> "回收站" And window.Visible Then
windowLocations.Add window.Location, window.Name
window.Close
End If
Next window
' 将数据放入剪贴板
Dim OBJ As New DataObject
Dim txt As String
txt = "This goes in clipboard"
OBJ.SetText txt
OBJ.PutInClipboard
' 重新打开文件资源管理器窗口
For Each location In windowLocations.Keys
Dim window As Object
Set window = GetObject("Shell.Application").Windows.Create
With window
.Location = windowLocations(location)
.Visible = True
End With
Next location
注意事项
- 在使用 Shell.Run 或 SendKeys 方法之前,关闭所有其他应用程序。
- VBA 方法会关闭所有打开的文件资源管理器窗口,包括那些你可能想要保留打开的窗口,在使用前请保存未保存的工作。
结论
OBJ.PutInclipboard 问题是由文件资源管理器对剪贴板的独占访问引起的。本文提供了三种修复方法:使用 Shell.Run、SendKeys 和 VBA。请根据你的具体需求选择最合适的解决方案。
常见问题解答
1. 为什么会出现 OBJ.PutInclipboard 问题?
文件资源管理器对剪贴板具有独占访问权限,在打开时会阻止其他应用程序访问。
2. 如何使用 VBA 保存文件资源管理器窗口的位置?
可以使用 Collection 存储窗口位置,并在关闭窗口后重新打开它们。
3. 如何关闭所有打开的文件资源管理器窗口?
可以使用 VBA 循环关闭所有可见的文件资源管理器窗口。
4. 如何防止 OBJ.PutInclipboard 问题再次出现?
关闭文件资源管理器或使用修复方法将数据放入剪贴板。
5. 是否有其他方法可以将数据放入剪贴板?
可以使用其他剪贴板管理器或第三方工具。