我试图让一个屏幕捕捉的服务。 我有一个物理PC,我想运行一个显示文档(例如:的MSWord),然后采取截图的程序。 问题是,如果我使用
using (var bitmap = new Bitmap(p.EndX - p.StartX, p.EndY - p.StartY))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(p.StartX, p.StartY, 0, 0,
p.EndX,p.EndY,new Size(p.EndX - p.StartX,
p.EndY - p.StartY));
}
bitmap.Save("result.png", ImageFormat.Png);
}
如果我有一个LCD屏连接它才起作用。 (或者,如果我通过RDP连接)。 但每当我拔掉RDP我的屏幕/断开。 Win32Com trows由于无效的句柄错误 - 屏幕不再存在。
我想问一下是否有一种方法如何在Windows力,以为有一些显示器(虚拟/假的),所以它可以采取截图?
我有同样的本能罗伯特·哈维,当我第一次看到你的问题。 我记得试图建立机器作为无头的服务器,并运行到各种麻烦。 我能得到的一切连接了显示器在板凳上工作,但只要我断开监视器,视频硬件似乎完全停止工作,所以,我甚至不能远程连接到该系统。 我认为这件事情做的VGA同步信号。 当视频硬件没有得到该同步信号,它自行关闭。 它是由平凡的短接针脚同步绕过。 如果你是电倾斜,你可以查找的引脚规格的VGA连接器,并找出该怎么做。 否则,你经常可以逃脱购买和挂钩一个VGA-DVI转换适配器,技巧硬件,以为显示器连接。
不过,这并不听起来那是你的问题,因为你说,你仍然可以连接到使用远程桌面机,即使没有连接的屏幕。 我怀疑是否显示器的连接问题是一个红鲱鱼。 我想如果你登录到本机,然后断开显示器,一切都将继续正常工作。 同样,如果你连接显示器,但不登录,什么都不会工作,那么无论是。
因此,这意味着你的问题仅仅是一个合乎逻辑的:当没有屏幕,没有在该屏幕上显示的采取的照片什么的,所以功能失效。 是权力的代码CopyFromScreen
功能越来越句柄到虚拟屏幕包含桌面,然后块传输其形象为位图。 如果您还没有登录,本地或远程,没有桌面,并在其上运行没有交互式应用程序,因此CopyFromScreen
失败。
这个问题其实更类似于谁试图采取从服务的截图人或ASP.NET应用程序。 我不知道这些人希望发生。 同样在这里。 谷歌搜索,就会发现一些解决方法对于这个问题,很多人都贴在这里对堆栈溢出 。 一般情况下,他们都归结为冒充特定的用户,谁具有可screenshotted桌面。 但我看不出这会为你工作。
如果我理解正确的问题,解决的方法很简单。 你并不需要“强制Windows以为有一些显示器(虚拟/假的),所以它可以采取截图”。 你只需要登录,启动Microsoft Word,并运行代码。 尝试将计算机设置为自动登录在启动时。 而当你使用远程桌面,刚刚从虚拟会话断开连接而不注销。