如何使用不可见的System.Windows.Forms.WebBrowser?

时间:2010-08-19 19:04:57

标签: .net winforms webbrowser-control

我尝试在没有容器表单的情况下运行它,但DocumentCompleted事件不会触发。

我尝试在不透明度设置为0%的表单中运行它,但该过程并未完全隐藏,因为当用户使用 Alt + 时,它会显示给用户标签

我不介意过程是否出现在任务管理器上。

5 个答案:

答案 0 :(得分:3)

我猜你正在尝试做一些自动化的任务,比如报废数据或其他类似的东西。在这种情况下,您可能希望查看此问题和提供的答案:

  

Using BrowserSession and HtmlAgilityPack to login to Facebook through .NET

基本上它展示了如何使用无头浏览器加载HTML页面并与之交互。这是比自动化WebBrowser控件更好的解决方案。

答案 1 :(得分:2)

要防止显示窗口,请将此代码粘贴到表单中:

    protected override void SetVisibleCore(bool value) {
        if (!this.IsHandleCreated) {
            CreateHandle();
            value = false;
        }
        base.SetVisibleCore(value);
    }

请注意,在您明确地使表单可见之前,Load事件不会运行,因此请移动if语句中的任何代码。

没有运行DocumentCompleted事件通常是由于没有运行消息循环(Application.Run)。 WebBrowser需要一个,以及一个标有[STAThread]的线程,以便触发其事件。消息循环对于COM组件非常重要。

使用以下代码防止隐形表格被盗,这一点也很重要:

protected override bool ShowWithoutActivation
{
    get { return true; } // prevents form creation from stealing focus
}

form1.Enabled = false; // prevents inner controls from stealing focus

答案 2 :(得分:1)

ShowInTaskbar设为false,将FormBorderStyle设为无,将ControlBox设为false。

答案 3 :(得分:1)

通过3个步骤完成:

  1. 隐藏表单使用Opacity = 0
  2. 要隐藏任务栏,请使用ShowInTaskbar = false
  3. 要隐藏 Alt + 标签,请使用以下代码
  4. public partial class Form1 : Form
    {
        [DllImport("user32.dll")]
        public static extern int SetWindowLong(IntPtr window, int index, int
        value);
    
        [DllImport("user32.dll")]
        public static extern int GetWindowLong(IntPtr window, int index);
    
        const int GWL_EXSTYLE = -20;
        const int WS_EX_TOOLWINDOW = 0x00000080;
    
        public Form1()
        {
            InitializeComponent();
            int windowStyle = GetWindowLong(Handle, GWL_EXSTYLE);
            SetWindowLong(Handle, GWL_EXSTYLE, windowStyle | WS_EX_TOOLWINDOW);
        }
    }
    

    或按照建议:

    public partial class Form1 : Form
    {
        const int WS_EX_TOOLWINDOW = 0x00000080;
    
        protected override CreateParams CreateParams
        {
            get
            {
                var createParams = base.CreateParams;
                createParams.ExStyle |= WS_EX_TOOLWINDOW;
                return createParams;
            }
        }
    }
    

答案 4 :(得分:0)

您是否尝试将 0%不透明度 隐藏Form.Hide())表单与ShowInTaskbar属性设置为false进行组合?

已经有一段时间了,但我相信ShowInTaskbar = false也会隐藏Alt-Tab中的窗口