C#获取当前系统的活动窗体和状态
2008-12-24 11:21
543 查看
目前获取的是句饼和窗体标题和最大化最小化状态.
使用
dataGridView1.DataSource = Tools.Sys.GetWindows.Load();
使用静态的方法就可以了.
具体类
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace OpenCAD.Tools.Sys
{
/// <summary>
/// 获取全部窗体
/// zgke@sina.com
/// 2008-12-24
/// </summary>
public class GetWindows
{
public class WindowsInfo
{
private IntPtr m_Handle;
/// <summary>
/// 句柄
/// </summary>
public IntPtr Handle { get { return m_Handle; } set { m_Handle = value; } }
private string m_Title;
/// <summary>
/// 标题
/// </summary>
public string Title { get { return m_Title; } set { m_Title = value; } }
private bool m_IsMinimzed;
/// <summary>
/// 是否最小
/// </summary>
public bool IsMinimzed { get { return m_IsMinimzed; } set { m_IsMinimzed = value; } }
private bool m_IsMaximized;
/// <summary>
/// 是否最大
/// </summary>
public bool IsMaximized { get { return m_IsMaximized; } set { m_IsMaximized = value; } }
public WindowsInfo()
{
m_Handle = IntPtr.Zero;
m_Title = "";
m_IsMinimzed = false;
m_IsMaximized = false;
}
public WindowsInfo(IntPtr p_Handle, string p_Title, bool p_IsMinimized, bool p_IsMaximized)
{
this.m_Handle = p_Handle;
this.m_Title = p_Title;
this.m_IsMinimzed = p_IsMinimized;
this.m_IsMaximized = p_IsMaximized;
}
}
private static IList<WindowsInfo> _WindowsList = new List<WindowsInfo>();
private static IntPtr _Statusbar;
public delegate bool EnumWindowsProc(IntPtr p_Handle, int p_Param);
private static bool NetEnumWindows(IntPtr p_Handle, int p_Param)
{
if (!API.IsWindowVisible(p_Handle))
return true;
StringBuilder _TitleString = new StringBuilder(256);
API.GetWindowText(p_Handle, _TitleString, 256);
if (string.IsNullOrEmpty(_TitleString.ToString()))
{
return true;
}
if (_TitleString.Length != 0 || (_TitleString.Length == 0) || p_Handle != _Statusbar)
{
_WindowsList.Add(new WindowsInfo(p_Handle, _TitleString.ToString(), API.IsIconic(p_Handle), API.IsZoomed(p_Handle)));
}
return true;
}
public static IList<WindowsInfo> Load()
{
_Statusbar = API.FindWindow("Shell_TrayWnd", "");
EnumWindowsProc _EunmWindows = new EnumWindowsProc(NetEnumWindows);
API.EnumWindows(_EunmWindows, 0);
return _WindowsList;
}
private class API
{
[DllImport("user32.dll")]
public static extern int EnumWindows(GetWindows.EnumWindowsProc ewp, int lParam);
[DllImport("user32.dll")]
public static extern bool IsWindowVisible(IntPtr hWnd);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsIconic(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern bool IsZoomed(IntPtr hWnd);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
}
}
}
使用
dataGridView1.DataSource = Tools.Sys.GetWindows.Load();
使用静态的方法就可以了.
具体类
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace OpenCAD.Tools.Sys
{
/// <summary>
/// 获取全部窗体
/// zgke@sina.com
/// 2008-12-24
/// </summary>
public class GetWindows
{
public class WindowsInfo
{
private IntPtr m_Handle;
/// <summary>
/// 句柄
/// </summary>
public IntPtr Handle { get { return m_Handle; } set { m_Handle = value; } }
private string m_Title;
/// <summary>
/// 标题
/// </summary>
public string Title { get { return m_Title; } set { m_Title = value; } }
private bool m_IsMinimzed;
/// <summary>
/// 是否最小
/// </summary>
public bool IsMinimzed { get { return m_IsMinimzed; } set { m_IsMinimzed = value; } }
private bool m_IsMaximized;
/// <summary>
/// 是否最大
/// </summary>
public bool IsMaximized { get { return m_IsMaximized; } set { m_IsMaximized = value; } }
public WindowsInfo()
{
m_Handle = IntPtr.Zero;
m_Title = "";
m_IsMinimzed = false;
m_IsMaximized = false;
}
public WindowsInfo(IntPtr p_Handle, string p_Title, bool p_IsMinimized, bool p_IsMaximized)
{
this.m_Handle = p_Handle;
this.m_Title = p_Title;
this.m_IsMinimzed = p_IsMinimized;
this.m_IsMaximized = p_IsMaximized;
}
}
private static IList<WindowsInfo> _WindowsList = new List<WindowsInfo>();
private static IntPtr _Statusbar;
public delegate bool EnumWindowsProc(IntPtr p_Handle, int p_Param);
private static bool NetEnumWindows(IntPtr p_Handle, int p_Param)
{
if (!API.IsWindowVisible(p_Handle))
return true;
StringBuilder _TitleString = new StringBuilder(256);
API.GetWindowText(p_Handle, _TitleString, 256);
if (string.IsNullOrEmpty(_TitleString.ToString()))
{
return true;
}
if (_TitleString.Length != 0 || (_TitleString.Length == 0) || p_Handle != _Statusbar)
{
_WindowsList.Add(new WindowsInfo(p_Handle, _TitleString.ToString(), API.IsIconic(p_Handle), API.IsZoomed(p_Handle)));
}
return true;
}
public static IList<WindowsInfo> Load()
{
_Statusbar = API.FindWindow("Shell_TrayWnd", "");
EnumWindowsProc _EunmWindows = new EnumWindowsProc(NetEnumWindows);
API.EnumWindows(_EunmWindows, 0);
return _WindowsList;
}
private class API
{
[DllImport("user32.dll")]
public static extern int EnumWindows(GetWindows.EnumWindowsProc ewp, int lParam);
[DllImport("user32.dll")]
public static extern bool IsWindowVisible(IntPtr hWnd);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsIconic(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern bool IsZoomed(IntPtr hWnd);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
}
}
}
相关文章推荐
- .NET(C#):关于获取系统电池状态
- 转:在C#中获取打印机的当前状态
- Android中getSystemService介绍,获取系统的运行状态,判断当前网络状态
- 获取当前系统桌面路径(C# 代码)
- 转载:c#如何获取当前系统所有的字体和颜色?
- c#获取当前系统的时间
- C#获取当前系统磁盘符、系统目录、桌面等
- C#让TopMost窗体弹出并置顶层但不获取当前输入焦点的终极办法
- 获取当前系统ProgramFiles的目录(C# 源代码)
- C#获取当前系统信息的类
- C# 获取24小时制的当前系统时间
- MFC之Win7获取当前活动用户与锁屏状态
- C#获取当前窗体的受焦控件。
- C#中获取当前系统中安装的所有字体及预定义颜色
- 获取当前系统桌面路径(C# 代码)
- C# 获取系统当前进程列表 浮兮 视频解析
- c#基础知识(获取系统当前时间)
- c# 获取当前活动窗口句柄,获取窗口大小及位置
- C# 当前系统时间获取及时间格式详解
- c# 获取当前活动窗口句柄,获取窗口大小及位置