有没有办法在不显示 gui 窗口的情况下运行 c# 窗体应用程序(如控制台应用程序)

本文关键字:应用程序 窗体 运行 控制台 情况下 显示 窗口 gui 有没有 | 更新日期: 2023-09-27 18:25:37

有没有办法在不显示 gui 窗口的情况下运行 C# 窗体应用程序(如控制台应用程序(。我正在尝试将网页的屏幕短片加载到 webkit.net 控件中。

一切正常,我可以获取屏幕截图,但如果有一种方法可以在不显示窗口的情况下运行应用程序,则将其包含在脚本中以自动捕获网页会更干净。

我已经尝试过:form.hide(( 方法,但有些它根本不隐藏任何东西。

有没有办法在不显示 gui 窗口的情况下运行 c# 窗体应用程序(如控制台应用程序)

在应用程序中,创建新的 WinForms 应用程序时,请删除 Form1.cs 和设计器文件。

然后在程序.cs main方法中,您有以下代码:

  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);
  Application.Run(new Form1());

删除这些行,并放置您需要的内容。如果要通过在 Main 方法中添加某种循环来保持程序运行,请确保 Main 方法永远不会返回。

您还可以考虑创建一个NotifyIcon,以便程序将在任务栏的通知区域内显示通知图标。通过这种方式,您可以向通知图标添加菜单,以便用户可以通过某种方式交互和关闭应用程序。

我不

熟悉 webkit.net API,但你提到,它提供了一个Windows Forms控件。有一个System.Windows.Forms.Control.DrawToBitmap,它将控件绘制为位图。它不需要将控件放入窗体中。

使用 Øyvind Knobloch-Bråthen 的方法,示例Main方法如下所示:

static void Main()
{
    // Leave these lines here!
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    // change this in order to use the webkit control
    Control ctrl = new Button { Width = 100, Height = 23, Text = "abc" };
    using (Bitmap bitmap = new Bitmap(ctrl.Width, ctrl.Height, PixelFormat.Format32bppRgb))
    {
        ctrl.DrawToBitmap(bitmap, new Rectangle(0, 0, ctrl.Width, ctrl.Height));
        bitmap.Save("test.png");
    }
}

请注意,我使用了一个按钮 - 您应该修改它以绘制您的 webkit.net 控件。

我认为 API 可能不支持您在这里要做的事情。我的建议是搜索WebKit库以寻找某种方法,而无需WinForms控件即可制作屏幕截图。

如果要采用此路径找到解决方案,可以尝试将"Program.cs"中的Application.Run(new Form1());替换为以下内容:

using (Form1 form = new Form1())
{
  form1.webKit1.DoScreenshot() // Just guessing on the API here
}

我不能保证这真的会起作用。或者它将继续在新的未来版本中工作 webkit.net

您极不可能从您自己的应用程序中的第 3 方控件获取屏幕截图,而用户看不到它 - 如果窗口在屏幕上不可见(未打开、隐藏、在屏幕外打开,甚至只是在其他内容后面(,那么它根本不会呈现。

如果 webkit 具有为您呈现到屏幕外位图的特定机制,那么您可以使用它来生成所需的图像而不显示控件 - 或者正如@Stephan指出的那样,DrawToBitmap 可能会起作用。除此之外,您可能会进入在隐藏的桌面或其他黑客上运行应用程序的复杂领域。