有没有办法运行c#表单应用程序而不显示gui窗口(如控制台应用程序)

时间:2012-02-23 12:55:32

标签: c# .net winforms webpage-screenshot webkit.net

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

一切正常,我可以获得屏幕截图,但是如果有办法运行应用程序而不显示窗口,那么将它包含在脚本中以自动化网页捕获会更加清晰。

我尝试过:form.hide()方法,但有些方法根本没有隐藏任何内容。

4 个答案:

答案 0 :(得分:6)

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

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

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

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

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

答案 1 :(得分:2)

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

使用ØyvindKnobloch-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控件。

答案 2 :(得分:1)

我认为您在此处想要做的事情可能不受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 :(得分:0)

如果窗口在屏幕上不可见(未打开,隐藏),那么您在自己的应用程序中无法看到第三方控件的屏幕抓取,而不会让用户看到它是极不可能的。 ,在屏幕外打开,甚至只是在其他东西后面)然后它根本就不会呈现。

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