在C#中,你可以使用EnumChildWindows
方法來枚舉一個窗口的所有子窗口。這是一個簡單的示例,展示了如何使用EnumChildWindows
方法來獲取一個窗口的所有子窗口:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
class Program
{
[DllImport("user32.dll")]
static extern bool EnumChildWindows(IntPtr hWnd, EnumWindowProc lpEnumWindowProc, IntPtr lParam);
[DllImport("user32.dll")]
static extern bool IsWindowVisible(IntPtr hWnd);
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate bool EnumWindowProc(IntPtr hWnd, IntPtr lParam);
static void Main()
{
// 替換為目標窗口的句柄
IntPtr targetWindowHandle = new IntPtr(0x00000000); // 這里的句柄應該是你要枚舉子窗口的窗口句柄
if (IsWindowVisible(targetWindowHandle))
{
EnumChildWindows(targetWindowHandle, EnumChildWindowsCallback, IntPtr.Zero);
}
else
{
Console.WriteLine("目標窗口不可見");
}
}
static bool EnumChildWindowsCallback(IntPtr hWnd, IntPtr lParam)
{
Console.WriteLine($"窗口句柄: {hWnd}");
// 你可以在這里對每個子窗口執行任何操作
return true; // 繼續枚舉
}
}
在這個示例中,我們首先導入了user32.dll
庫,然后定義了EnumChildWindows
方法、IsWindowVisible
方法和EnumWindowProc
委托。在Main
方法中,我們檢查目標窗口是否可見,如果可見,則調用EnumChildWindows
方法并傳遞EnumChildWindowsCallback
方法作為回調函數。
EnumChildWindowsCallback
方法是一個回調函數,它將在枚舉每個子窗口時被調用。在這個方法中,我們可以對每個子窗口執行任何操作,例如打印窗口句柄。回調函數的返回值應該始終為true
,以便繼續枚舉。