仅在两个克隆显示中的一个上显示演示计时器

时间:2012-01-21 11:49:27

标签: device-driver presentation multiple-monitors

如果克隆显示器,是否可以在一个显示器上显示应用程序?我的目标是开发一个计时器,它在演示期间显示在笔记本电脑的显示屏上,而不是放在投影机上。

我正在寻找类似windows的“识别显示”功能,即使在克隆模式下,它也能在不同的显示器上显示数字1和2。

由于

修改

我发现了possible duplicate这个问题。在这种情况下接受的答案是使用Screens.AllScreens来发现屏幕数量。在我的情况下,这还不够。对已接受答案的评论链接到关于directly painting on the desktop的帖子。我尝试使用以下代码,但文本出现在两个显示器上。获取输入的Hdc的代码来自关于screen captures的文章。我不确定要为其他参数设置什么(在文章中它们是IntPtr.Zero)

[DllImport("gdi32.dll")]
static extern IntPtr CreateDC(IntPtr lpszDriver, string lpszDevice, IntPtr lpszOutput, IntPtr lpszInitData);

[DllImport("gdi32.dll")]
static extern IntPtr DeleteDC(IntPtr hdc);

private void PaintOnDesktop(string stringToPrint, Font font, Brush brush, PointF position) {
    string deviceName = Screen.AllScreens[0].DeviceName;
    IntPtr targetHdc = CreateDC(IntPtr.Zero, deviceName, IntPtr.Zero, IntPtr.Zero);
    using (Graphics g = Graphics.FromHdc(targetHdc)) {
        g.DrawString(stringToPrint, font, brush, position);
    }
    DeleteDC(targetHdc);
}

修改2

显然在C#中无法做到这一点,所以我将C#标签更改为设备驱动程序。

1 个答案:

答案 0 :(得分:1)

实现这种效果的唯一方法是“手动”“克隆”屏幕,即在利用驾驶员的这个特征之外,这当然会引起一些滞后。 UltraMon具有这样的功能,专为不支持多显示器克隆的视频卡或操作系统而设计。它基本上是通过快速截取桌面并将其显示在另一个(扩展)监视器上的表单上来完成的。

引起的滞后只出现在其中一个显示器上,所以在你的情况下,如果这是用于演示,我建议将“你的”显示器(可能是你的笔记本电脑上的主显示器)作为延迟的接收者,所以观众没有看到它。然后,您可以在任一屏幕上绘制一个计时器表格。