我尝试在没有容器表单的情况下运行它,但DocumentCompleted
事件不会触发。
我尝试在不透明度设置为0%
的表单中运行它,但该过程并未完全隐藏,因为当用户使用 Alt + 时,它会显示给用户标签
我不介意过程是否出现在任务管理器上。
答案 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个步骤完成:
Opacity = 0
ShowInTaskbar = false
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中的窗口