Как использовать невидимый System.Windows.Forms.WebBrowser? - PullRequest
0 голосов
/ 19 августа 2010

Я пытался запустить его без формы контейнера, но событие DocumentCompleted не срабатывает.

Я попытался запустить его в форме с непрозрачностью, установленной на 0%, но процесс не полностью скрыт, так как он отображается пользователю, когда он использует Alt + Tab

Я не против, если процесс появится в диспетчере задач.

Ответы [ 5 ]

3 голосов
/ 19 августа 2010

Я предполагаю, что вы пытаетесь выполнить какую-то автоматизированную задачу, такую ​​как удаление данных или что-то подобное. В этом случае вы можете посмотреть на этот вопрос и ответ:

Использование BrowserSession и HtmlAgilityPack для входа в Facebook через .NET

В основном это показывает, как использовать браузер без головы для загрузки HTML-страниц и взаимодействия с ними. Это лучшее решение, чем автоматизация элемента управления WebBrowser.

2 голосов
/ 20 августа 2010

Чтобы предотвратить отображение окна, вставьте этот код в вашу форму:

    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
1 голос
/ 19 августа 2010

Это выполняется за 3 шага:

Чтобы скрыть форму, используйте Opacity = 0 Чтобы скрыть из панели задач, используйте ShowInTaskbar = false Чтобы скрыть от Alt + Tab используйте следующий код

.

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;
        }
    }
}
1 голос
/ 19 августа 2010

Установите ShowInTaskbar на false, FormBorderStyle на None и ControlBox на false.

0 голосов
/ 19 августа 2010

Вы пытались объединить 0% непрозрачность скрытую (Form.Hide()) форму с ее ShowInTaskbar , установленным в false?

Это было давно, но я верю, что ShowInTaskbar = false также скроет окно от Alt-Tab

...