0

我的应用程序内部提出了一个对话框WebBrowser,我需要找到它。我试过这个:

FindWindowEx(webBrowserEx1.Handle, IntPtr.Zero, "#32770", "title here")

但它确实回来了IntPtr.Zero

它确实工作正常:

FindWindow("#32770", "title here")

但我只想搜索webBrowserEx1控件内部的窗口,而不是像这样的全局搜索FindWindow()

更新:使用 spy++ 我可以看到 DialogBox 既不是 DialogBox 的第一个子窗口也不是所有者WebBrowser(我想这就是它不起作用的原因),但父窗口是我自己的应用程序(WebBrowser 所在的位置)所以我像这样更新了我的代码:

handle = FindWindowEx(this.Handle, IntPtr.Zero, "#32770", "title here");

但它也没有奏效。

4

1 回答 1

2

可能是 Dialog 不是 Dialog 的直接子级WebBrowser- 也许您可以使用 Spy++ 验证这一点。

巧合的是,就在昨天,我偶然发现了一段 c# 代码,我多年前使用它递归地搜索子窗口。也许这有帮助:

[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

/// <summary>
/// Uses FindWindowEx() to recursively search for a child window with the given class and/or title.
/// </summary>
public static IntPtr FindChildWindow( IntPtr hwndParent, string lpszClass, string lpszTitle )
{
 return FindChildWindow( hwndParent, IntPtr.Zero, lpszClass, lpszTitle );
}

/// <summary>
/// Uses FindWindowEx() to recursively search for a child window with the given class and/or title,
/// starting after a specified child window.
/// If lpszClass is null, it will match any class name. It's not case-sensitive.
/// If lpszTitle is null, it will match any window title.
/// </summary>
public static IntPtr FindChildWindow( IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszTitle )
{
 // Try to find a match.
 IntPtr hwnd = FindWindowEx( hwndParent, IntPtr.Zero, lpszClass, lpszTitle );
 if ( hwnd == IntPtr.Zero )
 {
  // Search inside the children.
  IntPtr hwndChild = FindWindowEx( hwndParent, IntPtr.Zero, null, null );
  while ( hwndChild != IntPtr.Zero && hwnd == IntPtr.Zero )
  {
   hwnd = FindChildWindow( hwndChild, IntPtr.Zero, lpszClass, lpszTitle );
   if ( hwnd == IntPtr.Zero )
   {
    // If we didn't find it yet, check the next child.
    hwndChild = FindWindowEx( hwndParent, hwndChild, null, null );
   }
  }
 }
 return hwnd;
}
于 2015-05-09T16:07:30.953 回答