[DllImport("user32.dll")]
static extern bool EnumDesktopWindows(IntPtr hDesktop,
EnumDesktopWindowsDelegate lpfn, IntPtr lParam);
Private Declare Auto Function EnumDesktopWindows Lib "user32" (ByVal hDesktop As IntPtr, ByVal lpEnumCallbackFuntion As enumdelegate, ByVal lParam As IntPtr) As Boolean
None.
None.
Please add some!
using System;
using System.Text;
using System.Collections;
using System.Runtime.InteropServices;
/// <summary>
/// EnumDesktopWindows Demo - shows the caption of all desktop windows.
/// Authors: Svetlin Nakov, Martin Kulov
/// Bulgarian Association of Software Developers - http://www.devbg.org/en/
/// </summary>
public class EnumDesktopWindowsDemo
{
const int MAXTITLE = 255;
private static ArrayList mTitlesList;
private delegate bool EnumDelegate(IntPtr hWnd, int lParam);
[DllImport("user32.dll",
EntryPoint="EnumDesktopWindows",
ExactSpelling = false,
CharSet=CharSet.Auto,
SetLastError=true)]
private static extern bool _EnumDesktopWindows(IntPtr hDesktop,
EnumDelegate lpEnumCallbackFunction,
IntPtr lParam);
[DllImport("user32.dll",
EntryPoint="GetWindowText",
ExactSpelling=false,
CharSet=CharSet.Auto,
SetLastError=true)]
private static extern int _GetWindowText(IntPtr hWnd,
StringBuilder lpWindowText,
int nMaxCount);
private static bool EnumWindowsProc(IntPtr hWnd, int lParam)
{
string title = GetWindowText(hWnd);
mTitlesList.Add(title);
return true;
}
/// <summary>
/// Returns the caption of a windows by given HWND identifier.
/// </summary>
public static string GetWindowText(IntPtr hWnd)
{
StringBuilder title = new StringBuilder(MAXTITLE);
int titleLength = _GetWindowText(hWnd, title, title.Capacity + 1);
title.Length = titleLength;
return title.ToString();
}
/// <summary>
/// Returns the caption of all desktop windows.
/// </summary>
public static string[] GetDesktopWindowsCaptions()
{
mTitlesList = new ArrayList();
EnumDelegate enumfunc = new EnumDelegate(EnumWindowsProc);
IntPtr hDesktop = IntPtr.Zero; // current desktop
bool success = _EnumDesktopWindows(hDesktop, enumfunc, IntPtr.Zero);
if (success)
{
// Copy the result to string array
string[] titles = new string[mTitlesList.Count];
mTitlesList.CopyTo(titles);
return titles;
}
else
{
// Get the last Win32 error code
int errorCode = Marshal.GetLastWin32Error();
string errorMessage = String.Format("EnumDesktopWindows failed with code {0}.", errorCode);
throw new Exception(errorMessage);
}
}
static void Main()
{
string[] desktopWindowsCaptions = GetDesktopWindowsCaptions();
foreach (string caption in desktopWindowsCaptions)
Console.WriteLine(caption);
}
}
Const MAXTITLE As Integer = 255
Public Shared mTitlesList As ArrayList
Public Delegate Function EnumDelegate(ByVal hWnd As IntPtr, ByVal lParam As Integer) As Boolean
Private Shared Function EnumWindowsProc(ByVal hWnd As IntPtr, ByVal lParam As Integer) As Boolean
Dim title As String = GetWindowText(hWnd)
mTitlesList.Add(title)
Return True
End Function
Public Shared Function GetWindowText(ByVal hWnd As IntPtr) As String
Dim title As System.Text.StringBuilder = New System.Text.StringBuilder(MAXTITLE)
Dim titleLength As Integer = GetWindowText(hWnd, title, (title.Capacity + 1))
title.Length = titleLength
Return title.ToString
End Function
Public Shared Function GetDesktopWindowsCaptions() As String()
mTitlesList = New ArrayList
Dim enumfunc As EnumDelegate = New EnumDelegate(AddressOf EnumWindowsProc)
Dim hDesktop As IntPtr = IntPtr.Zero
' current desktop
Dim success As Boolean = EnumDesktopWindows(hDesktop, enumfunc, IntPtr.Zero)
If success Then
' Copy the result to string array
Dim titles() As String = New String((mTitlesList.Count) - 1) {}
mTitlesList.CopyTo(titles)
Return titles
Else
' Get the last Win32 error code
Dim errorMessage As String = String.Format("EnumDesktopWindows failed.")
Throw New Exception(errorMessage)
End If
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim desktopWindowsCaptions() As String = GetDesktopWindowsCaptions()
For Each caption As String In desktopWindowsCaptions
Console.WriteLine(caption)
Next
End Sub
Do you know one? Please contribute it!