delegate bool EnumWindowsProc ( IntPtr hWnd, IntPtr lParam ); [DllImport("user32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool EnumWindows ( EnumWindowsProc lpEnumFunc, IntPtr lParam ); [DllImport("user32.dll", SetLastError = true)] static extern int GetWindowText ( IntPtr hWnd, StringBuilder lpString, int nMaxCount ); [DllImport("user32.dll", SetLastError = true)] static extern int GetWindowTextLength ( IntPtr hWnd ); [DllImport("user32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool IsWindowVisible ( IntPtr hWnd ); public Form1 () { InitializeComponent(); } private void btnSearch_Click ( object sender, EventArgs e ) { EnumWindows(( hWnd, lParam ) => { if (IsWindowVisible(hWnd) && GetWindowTextLength(hWnd) != 0) { listBox1.Items.Add(GetWindowText(hWnd)); } return true; }, IntPtr.Zero); } string GetWindowText ( IntPtr hWnd ) { int len = GetWindowTextLength(hWnd) + 1; StringBuilder sb = new StringBuilder(len); len = GetWindowText(hWnd, sb, len); return sb.ToString(0, len); } }