返回

如何解决 Windows 文件资源管理器打开时出现的 OBJ.PutInclipboard 问题?

windows

在 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. 是否有其他方法可以将数据放入剪贴板?

可以使用其他剪贴板管理器或第三方工具。