- docs/computer-use-PROGRESS.md: 已完成/已知问题/关键机制踩坑记录 - tools/test-enum.ps1: EnumWindows 基准脚本(本机验证可用) - PLAN.md 更新:阶段3进行中,因余额暂停
29 lines
1.3 KiB
PowerShell
29 lines
1.3 KiB
PowerShell
Add-Type -TypeDefinition @'
|
|
using System;using System.Runtime.InteropServices;using System.Text;
|
|
public class W {
|
|
[DllImport("user32.dll")] public static extern bool EnumWindows(EnumProc cb, IntPtr l);
|
|
[DllImport("user32.dll")] public static extern int GetWindowText(IntPtr h, StringBuilder s, int n);
|
|
[DllImport("user32.dll")] public static extern int GetWindowTextLength(IntPtr h);
|
|
[DllImport("user32.dll")] public static extern bool IsWindowVisible(IntPtr h);
|
|
[DllImport("user32.dll")] public static extern bool GetWindowRect(IntPtr h, out RECT r);
|
|
public delegate bool EnumProc(IntPtr h, IntPtr l);
|
|
[StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left,Top,Right,Bottom; }
|
|
}
|
|
'@
|
|
$list = New-Object System.Collections.ArrayList
|
|
$cb = [W+EnumProc]{ param($h,$l)
|
|
if ([W]::IsWindowVisible($h)) {
|
|
$len = [W]::GetWindowTextLength($h)
|
|
if ($len -gt 0) {
|
|
$sb = New-Object System.Text.StringBuilder($len + 1)
|
|
[W]::GetWindowText($h,$sb,$sb.Capacity) | Out-Null
|
|
$r = New-Object W+RECT
|
|
[W]::GetWindowRect($h,[ref]$r) | Out-Null
|
|
[void]$list.Add(("{0}|{1}|{2},{3},{4},{5}" -f $h,$sb.ToString(),$r.Left,$r.Top,$r.Right,$r.Bottom))
|
|
}
|
|
}
|
|
return $true
|
|
}
|
|
[W]::EnumWindows($cb,[IntPtr]::Zero) | Out-Null
|
|
$list | ForEach-Object { Write-Output $_ }
|