1

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

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

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

4

4 回答 4

6

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

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

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

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

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

于 2012-02-23T12:59:21.477 回答
2

我不熟悉 webkit.net API,但您提到它提供了一个 Windows 窗体控件。有一个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 控件。

于 2012-02-23T13:31:44.253 回答
1

我认为 API 可能不支持您在此处执行的操作。我的建议是在 WebKit 库中搜索某种无需 WinForms 控件即可制作屏幕截图的方法。

如果您想采用此解决方案的路径,您可以尝试Application.Run(new Form1());在“Program.cs”中替换为以下内容:

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

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

于 2012-02-23T13:14:56.070 回答
0

如果一个窗口在屏幕上不可见(未打开、隐藏、在屏幕外打开),您极不可能从您自己的应用程序中的第 3 方控件获取屏幕抓取而不对用户可见甚至只是在其他东西后面),那么它根本不会渲染。

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

于 2012-05-15T21:58:00.767 回答