目前输出的IList<Window> 可能对于一般人来说难以掌握,敲打了ai得到了以下代码可以得到窗口句柄和位置,也许更方便操作窗口:

using System.Windows.Forms;using System.Collections.Generic;using Newtonsoft.Json.Linq;using System.Linq;using System.Windows;using System.Windows.Interop;using System.Runtime.InteropServices;public class WindowInfo{// Quicker将会调用的函数。可以根据需要修改返回值类型。 // 声明 Windows API 函数 GetWindowRect [DllImport("user32.dll")] public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect); // 结构体用来存储窗口位置和大小 [StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left; public int Top; public int Right; public int Bottom; public int Width { get { return Right - Left; } } public int Height { get { return Bottom - Top; } } } public static void Exec(Quicker.Public.IStepContext context){ // 读取动作里的变量值var windowList= context.GetVarValue("windowList") as IList<Window> ;Dictionary<string, string> dict = new Dictionary<string, string>();foreach (var window in windowList){ IntPtr handle = IntPtr.Zero; // 使用 Dispatcher.Invoke 确保在窗口所属的 UI 线程访问 window.Dispatcher.Invoke(() => { var interopHelper = new WindowInteropHelper(window); handle = interopHelper.Handle; // 获取窗口位置信息 RECT rect; if (GetWindowRect(handle, out rect)) { // 格式化窗口位置和大小信息 string windowInfo = rect.Left+","+rect.Top+","+rect.Right+","+ rect.Bottom +","+ rect.Width +","+ rect.Height ; // 将句柄和位置信息存入字典(句柄转换为字符串) dict.Add(handle.ToString(), windowInfo); } });} // 将生成的存储在上下文中 context.SetVarValue("windowInfodict", dict); // 向变量里输出值}}