阅读量:0
在C#中,可以通过调用EnumChildWindows函数来获取窗口的句柄,然后使用LINQ对结果进行排序。以下是一个示例代码:
using System; using System.Runtime.InteropServices; using System.Linq; using System.Collections.Generic; using System.Diagnostics; class Program { [DllImport("user32.dll")] public static extern bool EnumChildWindows(IntPtr hWndParent, EnumChildCallback lpEnumFunc, IntPtr lParam); public delegate bool EnumChildCallback(IntPtr hwnd, IntPtr lParam); static void Main() { List<IntPtr> childWindows = new List<IntPtr>(); EnumChildWindows(Process.GetCurrentProcess().MainWindowHandle, (hwnd, lParam) => { childWindows.Add(hwnd); return true; }, IntPtr.Zero); // 对结果进行排序 var sortedChildWindows = childWindows.OrderBy(hwnd => GetWindowText(hwnd)).ToList(); // 输出排序后的窗口标题 foreach (var hwnd in sortedChildWindows) { Console.WriteLine(GetWindowText(hwnd)); } } [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern int GetWindowText(IntPtr hWnd, System.Text.StringBuilder lpString, int nMaxCount); static string GetWindowText(IntPtr hWnd) { const int nChars = 256; System.Text.StringBuilder Buff = new System.Text.StringBuilder(nChars); if (GetWindowText(hWnd, Buff, nChars) > 0) { return Buff.ToString(); } return null; } }
在上面的示例代码中,我们通过调用EnumChildWindows函数获取父窗口的所有子窗口句柄,并使用GetWindowText函数获取每个子窗口的标题。然后使用LINQ的OrderBy方法对子窗口标题进行排序。最后输出排序后的子窗口标题。