[轉貼].NET(C#)平台調用:使用EnumWindows和GetWindowText列舉窗口

2013年10月19日 星期六

[轉貼].NET(C#)平台調用:使用EnumWindows和GetWindowText列舉窗口

對於API的EnumWindows,第一個參數WNDENUMPROC是一個函數指針類型(EnumWindowsProc),HWND代表窗體的句柄。第二個LPARAM代表EnumWindows的第二個參數,即傳入回調函數的用戶自定義對象(參數)。

EnumWindows只能獲取一個窗體的句柄,因此用GetWindowText返回窗口的標題。

代碼:
//函數指針類型
delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);

[DllImport("user32.dll")]
static extern int EnumWindows(EnumWindowsProc hWnd, IntPtr lParam);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int GetWindowText(IntPtr hWnd, StringBuilder lpText, int nCount);

//回調函數
static bool PrintWindow(IntPtr hWnd, IntPtr lParam)
{
    //分配空間
    var sb = new StringBuilder(50);
    GetWindowText(hWnd, sb, sb.Capacity);
    //注意某些窗口沒有標題
    if (sb.ToString() != String.Empty)
        Console.WriteLine(sb.ToString());
    //回調函數有返回值
    return true;
}

static void Main()
{
    EnumWindows(PrintWindow, IntPtr.Zero);
}

0 意見:

張貼留言