如何在Internet Explorer中获取子窗口的句柄?

时间:2015-12-12 08:34:59

标签: c#

我的问题是无法在Internet Explorer中获得flash子控件,但我可以在webbrowser控件中执行此操作。 webbrowser控件是flash对象的错误,因此我需要通过Internet Explorer完成工作并自动执行flash测试。

以下是我试图在IE 11中复制的webbrowser控件的代码。

private async Task<bool> clickCoorindate(Point point)
{
    IntPtr handle = null;
    Process[] processes = Process.GetProcessesByName("iexplore");

    foreach (Process p in processes)
    {
        handle = p.MainWindowHandle;
    }

    //webBrowser1.Focus();
    int x = point.X;
    int y = point.Y; 
    // IntPtr handle = webBrowser1.Handle;
    StringBuilder className = new StringBuilder(100);
    while (className.ToString() != "MacromediaFlashPlayerActiveX") 
    {
        handle = GetWindow(handle, 5); // Get a handle to the child window
        GetClassName(handle, className, className.Capacity);
    }

    IntPtr lParam = (IntPtr)((y << 16) | x); // The coordinates
    IntPtr wParam = IntPtr.Zero; // Additional parameters for the click (e.g. Ctrl)
    const uint downCode = 0x201; // Left click down code
    const uint upCode = 0x202; // Left click up code
    const uint moveCode = 0x200;

    SendMessage(handle, downCode, wParam, lParam); // Mouse button down
    SendMessage(handle, upCode, wParam, lParam); // Mouse button up
    Thread.Sleep(20);
    SendMessage(handle, downCode, wParam, lParam); // Mouse button down
    SendMessage(handle, upCode, wParam, lParam); // Mouse button up

    return true;
}

当我使用Spy ++时,Flash对象窗口是IE窗口的子窗口。

当我在上面的代码中传递IE mainwindow句柄时,它永远不会找到MacromediaFlashPlayerActiveX句柄。

在webbrowser控件中测试此代码并传递webbrowser控件句柄时,它会找到flash对象。

知道如何使用IE吗?

有人在这里问了一个类似的问题并找到了解决方案,但遗憾的是没有添加它。 private static bool EnumWindow(IntPtr handle, IntPtr pointer) doesn't run

上述链接中的解决方案评论:

  

我找到了解决方案:)。基本上,iexplorer进程定义了许多不同的窗口处理程序。我不得不使用EnumThreadWindows并获取该进程的所有Windows Handler。之后,只需查看我感兴趣的班级名称。

0 个答案:

没有答案