我一直想知道如何做到这一点。我正在创建一个小应用程序,我需要计算出在TaskBar中显示了多少个应用程序或窗口。
我还没有找到任何关于这方面的信息,我将非常感谢任何人的帮助。
谢谢您:)
发布于 2010-03-31 01:08:10
正如其他人所说,您需要使用Win32 EnumWindows函数枚举窗口,并以这种方式获得计数。
您也可以使用Process.GetProcesses();枚举整个进程,但是资源管理器窗口等不是单独进程的窗口不会出现在该列表中。
int appCount = 0;
public bool EnumerateWindows(IntPtr hwnd, IntPtr lParam)
{
if (IsWindowVisible(hwnd))
{
StringBuilder sb = new StringBuilder();
string text = "";
GetWindowText(hwnd, sb, 1024);
text = sb.ToString();
if (text != string.Empty && text != "Program Manager")
{
appCount++;
}
}
return true;
}
private int GetAppCount()
{
appCount = 0;
EnumWindows(EnumerateWindows, new IntPtr(0));
return appCount;
}
internal delegate bool EnumThreadWindowsCallback(IntPtr hwnd, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern bool EnumWindows(EnumThreadWindowsCallback callback, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
internal static extern bool IsWindowVisible(IntPtr hwnd);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern int GetWindowText(IntPtr hWnd, [Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpString, int nMaxCount);发布于 2010-03-29 02:31:34
Here是一篇展示如何获取窗口的文章,当您使用ALT+TAB组合键时会显示这些窗口。
基本上,您将得到与任务栏中显示的窗口相同的窗口(除非它是未显示的工具窗口),但是,您始终可以检查WS_EX_TOOLWINDOW (未显示)和WS_EX_APPWINDOW (显示)。
发布于 2010-03-29 05:15:24
你可以看看我之前的答案here;这里的主要区别是你只需要计算符合给定要求的窗口。
https://stackoverflow.com/questions/2533734
复制相似问题