Áxe*_*ena 9 windows clipboard monitoring
我们正在部署一些带有在浏览器中执行操作的机器人软件的虚拟机,并且在访问剪贴板进行读取或写入时我们遇到了一些问题。他们显示“无法打开剪贴板”。
所以还有任何其他应用程序持有剪贴板。
我们如何调试它?有什么工具可以监控吗?AFAIK ProcMon不能完成这项工作。
机器是Windows XP。
har*_*ymc 10
剪贴板 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
Run Code Online (Sandbox Code Playgroud)
类似的 C# 函数可以在 Get Clipboard Owners Title/Caption 一文中找到。
归档时间: |
|
查看次数: |
2361 次 |
最近记录: |