有没有办法运行c#表单应用程序而不显示gui窗口(如控制台应用程序)。我正在尝试将网页的屏幕短片加载到webkit.net control。
一切正常,我可以获得屏幕截图,但是如果有办法运行应用程序而不显示窗口,那么将它包含在脚本中以自动化网页捕获会更加清晰。
我尝试过:form.hide()方法,但有些方法根本没有隐藏任何内容。
答案 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上运行应用程序的复杂领域。