gpt4 book ai didi

user-interface - 自动窗口屏幕截图成功/失败

转载 作者:行者123 更新时间:2023-12-04 04:45:05 25 4
gpt4 key购买 nike

我的目标是制作一个从桌面和所有正在使用的进程循环打印屏幕的 GUI。我现在唯一遇到的问题是:某些进程没有任何可视界面(例如操作系统进程)。

我正在使用这些命令来捕获屏幕:

_ScreenCapture_Capture(@MyDocumentsDir & "desktop.jpg")
_ScreenCapture_CaptureWnd(@MyDocumentsDir & "process.jpg", _
$processes[$window], -1, -1, -1, -1, True)

但正如我所说,有些程序没有接口(interface)会在 _ScreenCapture 命令中返回失败。有没有办法知道进程是否有用户界面?

最佳答案

有一些改进:

  • 你必须在你的文件名
  • 前加上一个“ \
  • 您无需指定默认参数
  • 当您使用 ProcessList() ,接收 PID 的第二个参数应始终为 0 ,而不是 $window也是。但是你不能使用 PID 调用屏幕截图功能!
  • 而不是使用 ProcessList()你应该只使用 WinList()并过滤所有可见的窗口
  • _ScreenCapture_CaptureWnd(...) 的第三和第四个默认参数函数是0 ,而不是 -1
  • 您可能应该确保要捕获的窗口处于事件状态,然后再捕获它...否则它可能隐藏在另一个窗口后面,并且只会捕获最顶层窗口的一部分

  • 因此,这是您的问题的有效解决方案:
    #include <Array.au3>
    #include <ScreenCapture.au3>

    Local $var = WinList()

    $visibleProcesses = "-1"
    For $i = 1 To $var[0][0]
    $handle = $var[$i][1]
    ; Only display visble windows that have a title
    If $var[$i][0] <> "" And BitAND(WinGetState($handle), 2) Then
    If _ArraySearch(StringSplit($visibleProcesses, "|", 2), $handle) == -1 _
    Then
    $visibleProcesses &= "|" & $handle
    EndIf
    EndIf
    Next
    $visibleProcesses = StringSplit($visibleProcesses, "|", 2)
    _ArrayDelete($visibleProcesses, 0)

    _ScreenCapture_Capture(@MyDocumentsDir & "\desktop.jpg")
    For $handle In $visibleProcesses
    _ScreenCapture_CaptureWnd(@MyDocumentsDir & "\process" & $handle & ".jpg", _
    HWnd($handle))
    Next

    这基本上使用 WinList()接收所有带有 GUI 的程序。然后过滤它们是否有标题并且可见( WinGetState(...) 必须返回 2)。进程句柄仅在尚未包含的情况下添加到分隔符分隔的字符串中,最后将列表转换为数组并删除其第一个虚拟条目。如果没有虚拟条目,您必须删除第一个前导分隔符。

    最后,您的函数被正确调用,句柄已转换为数组中的字符串,因此必须再次将其转换为句柄。

    如果您想包含 WinActivate(Hwnd($handle))在捕获之前使窗口在捕获之前处于事件状态,您可以考虑添加 _ArrayReverse($visibleProcesses)在最后一个循环之前为 WinList()应该返回一个从顶部到底部排序的列表。并且在将每个单独的窗口设置为事件窗口之后,向后遍历此列表将保留窗口的顺序,从而从最底部开始。

    关于user-interface - 自动窗口屏幕截图成功/失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18333200/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com