//根据传入的窗口句柄,获取到同级、顶级、低级的窗口,根据GetWindowCmd 传入的不同获取也不同,详细看GetWindowCmd 类说明
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr GetWindow(IntPtr hWnd, GetWindowCmd uCmd);
private void SysCycleCheckNetTimer_Tick{
Form m_ActiveForm = null;
//这句是我传入的父窗口Handle 查询能不能 获取到 父窗口form对象
IntPtr winPtr = GetWindow(this.Handle, GetWindowCmd.GW_HWNDFIRST);
m_ActiveForm = FromHandle(winPtr) as Form;
//if (m_ActiveForm != null)
//{
// MessageBox.Show("找到了");
//}
//3、从父窗口获取Handle循环取得所有子窗口
while (winPtr != IntPtr.Zero)
{
//4、继续获取下一个子窗口
winPtr = GetWindow(winPtr, GetWindowCmd.GW_HWNDNEXT);
m_ActiveForm = FromHandle(winPtr) as Form;
//排除没用的窗口一个是父窗口另一个 m_ActiveForm.Name 为空的 不知道什么窗口,所以根据空值来排除 剩余的就是其他激活中窗口
if (m_ActiveForm != null && this.Handle != winPtr&&!string.IsNullOrEmpty(m_ActiveForm.Name))
{
MessageBox.Show("找到了111" + m_ActiveForm.Name);
}
}
}
public enum GetWindowCmd : uint
{
/// <summary>
/// 返回的句柄标识了在Z序最高端的相同类型的窗口。
/// 如果指定窗口是最高端窗口,则该句柄标识了在Z序最高端的最高端窗口;
/// 如果指定窗口是顶层窗口,则该句柄标识了在z序最高端的顶层窗口:
/// 如果指定窗口是子窗口,则句柄标识了在Z序最高端的同属窗口。
/// </summary>
GW_HWNDFIRST = 0,
/// <summary>
/// 返回的句柄标识了在z序最低端的相同类型的窗口。
/// 如果指定窗口是最高端窗口,则该柄标识了在z序最低端的最高端窗口:
/// 如果指定窗口是顶层窗口,则该句柄标识了在z序最低端的顶层窗口;
/// 如果指定窗口是子窗口,则句柄标识了在Z序最低端的同属窗口。
/// </summary>
GW_HWNDLAST = 1,
/// <summary>
/// 返回的句柄标识了在Z序中指定窗口下的相同类型的窗口。
/// 如果指定窗口是最高端窗口,则该句柄标识了在指定窗口下的最高端窗口:
/// 如果指定窗口是顶层窗口,则该句柄标识了在指定窗口下的顶层窗口;
/// 如果指定窗口是子窗口,则句柄标识了在指定窗口下的同属窗口。
/// </summary>
GW_HWNDNEXT = 2,
/// <summary>
/// 返回的句柄标识了在Z序中指定窗口上的相同类型的窗口。
/// 如果指定窗口是最高端窗口,则该句柄标识了在指定窗口上的最高端窗口;
/// 如果指定窗口是顶层窗口,则该句柄标识了在指定窗口上的顶层窗口;
/// 如果指定窗口是子窗口,则句柄标识了在指定窗口上的同属窗口。
/// </summary>
GW_HWNDPREV = 3,
/// <summary>
/// 返回的句柄标识了指定窗口的所有者窗口(如果存在)。
/// GW_OWNER与GW_CHILD不是相对的参数,没有父窗口的含义,如果想得到父窗口请使用GetParent()。
/// 例如:例如有时对话框的控件的GW_OWNER,是不存在的。
/// </summary>
GW_OWNER = 4,
/// <summary>
/// 如果指定窗口是父窗口,则获得的是在Tab序顶端的子窗口的句柄,否则为NULL。
/// 函数仅检查指定父窗口的子窗口,不检查继承窗口。
/// </summary>
GW_CHILD = 5,
/// <summary>
/// (WindowsNT 5.0)返回的句柄标识了属于指定窗口的处于使能状态弹出式窗口(检索使用第一个由GW_HWNDNEXT 查找到的满足前述条件的窗口);
/// 如果无使能窗口,则获得的句柄与指定窗口相同。
/// </summary>
GW_ENABLEDPOPUP = 6
}
这就是解决方法