有没有办法在不显示 gui 窗口(如控制台应用程序)的情况下运行 c# forms 应用程序。我正在尝试将网页的屏幕短片加载到webkit.net 控件中。
一切正常,我可以获得屏幕截图,但如果有一种方法可以在不显示窗口的情况下运行应用程序,那么将其包含在脚本中以自动捕获网页会更加简洁。
我尝试过: form.hide() 方法,但有些方法根本不隐藏任何东西。
有没有办法在不显示 gui 窗口(如控制台应用程序)的情况下运行 c# forms 应用程序。我正在尝试将网页的屏幕短片加载到webkit.net 控件中。
一切正常,我可以获得屏幕截图,但如果有一种方法可以在不显示窗口的情况下运行应用程序,那么将其包含在脚本中以自动捕获网页会更加简洁。
我尝试过: form.hide() 方法,但有些方法根本不隐藏任何东西。
在您的应用程序中,当您创建一个新的 WinForms 应用程序时,删除 Form1.cs 和设计器文件。
然后在 Program.cs main 方法中,您有以下代码:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
删除这些行,并放置您需要的内容。如果您想通过在其中添加某种循环来保持程序运行,请确保 Main 方法永远不会返回。
您还可以考虑创建一个NotifyIcon
,以便您的程序将在任务栏的通知区域内显示一个通知图标。通过这种方式,您可以向通知图标添加一个菜单,以便用户可以通过某种方式与应用程序进行交互和关闭。
我不熟悉 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 控件。
我认为 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 未来版本中工作
如果一个窗口在屏幕上不可见(未打开、隐藏、在屏幕外打开),您极不可能从您自己的应用程序中的第 3 方控件获取屏幕抓取而不对用户可见甚至只是在其他东西后面),那么它根本不会渲染。
如果 webkit 具有为您呈现到屏幕外位图的特定机制,那么您可以使用它来生成所需的图像而不显示控件 - 或者正如@Stephan 所指出的那样,DrawToBitmap 可能会起作用。除此之外,您可能会进入在隐藏的桌面或其他黑客上运行应用程序的复杂领域。