如何检查哪个应用程序拥有剪贴板保留功能?

如何检查哪个应用程序拥有剪贴板保留功能?

我们正在部署一些带有机器人软件的虚拟机,这些软件可以在浏览器中执行操作,但在访问剪贴板进行读取或写入时,有些虚拟机遇到了问题。它们显示“无法打开剪贴板”。

因此有任何其他应用程序持有剪贴板。

我们如何调试它?有没有什么工具可以监控它?据我所知进程监控不起作用。

机器是Windows XP。

答案1

Clipboard API 可以追溯到 Windows 3.0(或更早?),设计很糟糕。不幸的是,它没有使用 get/set 原语,而是使用 open/close,这使得应用程序可以长时间保持其访问权限。Vista 对查看器链的处理进行了一些改进,但没有新的 API。

使用现有的 API,只有当剪贴板所有者还打开至少一个窗口时,才有可能识别该所有者。如果所有者没有窗口,那么就没戏了。

在线程中为什么我的剪贴板停止工作了?Jay Parzych 贡献了以下 vbs 代码,其中 GetClipboardLocker 函数返回持有剪贴板的进程的文件名:

<DllImport("user32.dll")> _
Public Function GetOpenClipboardWindow() As IntPtr
   End Function
 <DllImport("user32.dll", SetLastError:=True)> _
   Public Function GetWindowThreadProcessId(ByVal hWnd As IntPtr, ByRef lpdwProcessId As Integer) As Integer
   End Function
Public Function GetClipboardLocker() As String
       Dim hwnd As IntPtr = GetOpenClipboardWindow()
       If hwnd <> IntPtr.Zero Then
           Dim processId As Integer
           GetWindowThreadProcessId(hwnd, processId)
           Dim p As Process = Process.GetProcessById(processId)
           GetClipboardLocker = p.Modules(0).FileName
       Else
           GetClipboardLocker = String.Empty
       End If
   End Function

可以在帖子中找到类似的 C# 函数 获取剪贴板所有者的标题/标题

答案2

相关问题及解决方案:复制粘贴功能在 Windows 7 上不再起作用

对我有用的是下载GetOpenClipboardWindow.zip该工具帮助我找到锁定剪贴板的程序(VirtualBox)。

相关内容