在C#中,EnumWindows方法是Windows API中的一種功能,它用于枚舉所有頂層窗口或指定窗口的子窗口。通過調用EnumWindows方法,可以獲取當前系統中所有窗口的句柄,并對其進行操作。
EnumWindows方法的工作原理是通過傳入一個回調函數來枚舉系統中的所有窗口。當調用EnumWindows方法時,系統會遍歷所有窗口,并將每個窗口的句柄傳遞給指定的回調函數。在回調函數中,可以對每個窗口進行處理,例如獲取窗口的標題、類名等信息,或者對窗口進行操作。
以下是一個簡單的示例代碼,演示如何使用EnumWindows方法來枚舉系統中的所有頂層窗口:
using System;
using System.Runtime.InteropServices;
class Program
{
[DllImport("user32.dll")]
public static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam);
public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
static void Main()
{
EnumWindows(EnumWindowsCallback, IntPtr.Zero);
}
public static bool EnumWindowsCallback(IntPtr hWnd, IntPtr lParam)
{
// 獲取窗口標題信息
const int nChars = 256;
var buff = new char[nChars];
GetWindowText(hWnd, buff, nChars);
string windowTitle = new string(buff);
Console.WriteLine("Window title: " + windowTitle);
return true;
}
[DllImport("user32.dll", SetLastError = true)]
public static extern int GetWindowText(IntPtr hWnd, char[] lpString, int nMaxCount);
}
在上面的示例中,通過調用EnumWindows方法并傳入一個回調函數EnumWindowsCallback,我們可以枚舉系統中的所有頂層窗口,并打印出它們的標題信息。在EnumWindowsCallback回調函數中,我們調用了GetWindowText方法來獲取窗口的標題信息,并輸出到控制臺。
需要注意的是,枚舉窗口時需要使用InterOp服務來調用Windows API中的方法,因此需要添加相應的引用和引入操作。