我想监控一些应用程序,如何知道他们是MDI还是SDI,例如firefox 和 visual studio
解决方案 »
- WPF画Polyline太慢
- C#的DataGridView控件在虚拟模式下(VirtualMode=true)怎么放置复选框
- 翻译功能 暴力法
- Nhibernate 问题 急!在线等!
- *********************c# 设置为全屏时遇到的问题
- 请教,为何 using System.Mangement 会提示没有此命名空间?
- 本人公开一套完整的c#多文件上传程序源码,望高手纠正里边的个别程序错误,然后发表在此版,谢谢!
- 新手求助帖,如何实时更新文本位置和内容,并使其跟随轴的移动
- 进程的关闭问题
- 概念性问题,送分!分不够可以再加.
- 一个非常奇怪的问题,请答人解决
- 解决者赠送100元移动或联通充值卡:extjs 文本跨列合并单元格显示信息
{
private delegate bool EnumWindowsProc(IntPtr p_Handle, int p_Param); [DllImport("user32.dll")]
private static extern int EnumChildWindows(IntPtr hWndParent, EnumWindowsProc ewp, int lParam); [DllImport("user32.dll")]
private static extern int EnumWindows(EnumWindowsProc ewp, int lParam); [DllImport("User32.dll", CharSet = CharSet.Auto)]
private static extern int GetClassName(IntPtr hWnd, out STRINGBUFFER ClassName, int nMaxCount); [DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll")]
private static extern bool IsWindowVisible(IntPtr hWnd);
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
private struct STRINGBUFFER
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
public string szText;
}
private static IList<IntPtr> m_WindowsList;
private static IntPtr m_Statusbar; private static bool m_IsMdi = false;
/// <summary>
/// 获取所有窗体
/// </summary>
/// <returns></returns>
public static Dictionary<IntPtr, string> LoadWindows()
{
m_WindowsList = new List<IntPtr>();
m_Statusbar = FindWindow("Shell_TrayWnd", "");
EnumWindowsProc _EunmWindows = new EnumWindowsProc(NetEnumWindows);
EnumWindows(_EunmWindows, 0); Dictionary<IntPtr, string> _Return = new Dictionary<IntPtr, string>();
EnumWindowsProc _EunmControl = new EnumWindowsProc(NetEnumControl);
foreach (IntPtr _Windows in m_WindowsList)
{
m_IsMdi = false;
EnumChildWindows(_Windows, _EunmControl, 0); if (m_IsMdi)
{
_Return.Add(_Windows, "MDI");
}
else
{
_Return.Add(_Windows, "SDI");
}
}
return _Return;
}
private static bool NetEnumWindows(IntPtr p_Handle, int p_Param)
{
if (!IsWindowVisible(p_Handle))return true;
if (p_Handle == m_Statusbar) return true;
m_WindowsList.Add(p_Handle);
return true;
} private static bool NetEnumControl(IntPtr p_Handle, int p_Param)
{
STRINGBUFFER _ClassName = new STRINGBUFFER();
GetClassName(p_Handle, out _ClassName, 255);
if (_ClassName.szText == "MDIClient")
{
m_IsMdi = true;
}
return true;
}
}