2

有没有办法在 .NET 应用程序中使用Firefox或(无论安装哪个)?Chrome我没有考虑将geckowebkit engine放入我的应用程序,而是使用系统上安装的浏览器(就像 WebBrowser 控件使用 IE 一样)。我听说可以通过 ActiveX 控件实现,但没有找到更多信息。

4

1 回答 1

2

那么你可以使用 user32.dll 来设置指定子窗口的父窗口(这里是 firefox 或 chrome)。

结果是这样的: 在此处输入图像描述 首先我有两个小问题和一个更大的问题:

  1. 如您所见,firefox 未最大化,因此缺少某些内容(仍在寻找解决该问题的方法 [help appriciated])

  2. 因为您必须先启动该进程,然后再设置窗口的父级,所以 Firefox 会在您的应用程序之外运行一小段时间。

  3. 最大的问题:您试图“绑定”到您的应用程序的程序在运行您的应用程序时不能运行,因为它无法将 firefox 的父级设置为您的程序

MSDN 对方法的解释:http: //msdn.microsoft.com/en-us/library/windows/desktop/ff468919 (v=vs.85).aspx

[DllImport("user32.dll", SetLastError = true)]
private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int nWidth, int nHeight, bool repaint);
//hwnd: A handle to the window | x: The new position of the left side of the window. | y: The new position of the top of the window.
//nWidth: The new width of the window. | nHeight: The new height of the window. 
//repaint: Indicates whether the window is to be repainted. If this parameter is TRUE, the window receives a message. If the parameter is FALSE, no repainting of any kind occurs.
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

Process ffprocess = new Process();
        private void openProgramAndSetParent()
        {
            string str = @"C:\Program Files\Mozilla Firefox\firefox.exe"; //Enter full path to Firefox or Chrome

            ffprocess.StartInfo.FileName = str;
            ffprocess.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
            ffprocess.Start();

            IntPtr ptr = IntPtr.Zero;
            while ((ptr = ffprocess.MainWindowHandle) == IntPtr.Zero)
            {
                Application.DoEvents();
            }
            Thread.Sleep(1000);
            SetParent(ffprocess.MainWindowHandle, panel1.Handle);
            MoveWindow(ffprocess.MainWindowHandle, 0, 0, this.Width, this.Height -100, true);
        }

    private void Form1_Resize(object sender, EventArgs e)
    {
        try
        {
            MoveWindow(ffprocess.MainWindowHandle, 0, 0, this.Width, this.Height, true);
        }
        catch (Exception)
        {}
    }
于 2013-09-13T20:32:12.063 回答