C#中不同的屏幕捕获方法比较(包括BitBlt,CopyFromScreen,DirectX,PrintScreen)

时间:2012-03-09 22:38:05

标签: c# performance screen capture

我已经尝试了几天的屏幕截图,并尝试了许多不同的方法。

到目前为止,我最喜欢SlimDX(DirectX for .Net)方法,因为它不仅可以捕捉静止物体,还可以捕捉“透明”和“DX叠加”物体(即一切这发生在屏幕上)。缺点是制作单个屏幕截图需要相当长的时间(表面捕获为80-90ms,Surface->位图转换为110ms + Bitmap导出/保存时为600ms(可选)=总共800ms-1s)

BitBlt不会从我的显示器中捕获“DX叠加层”。但是它的性能更高。

PrintScreen - 太简单;)

CopyFromScreen ..我记不起来了..但它有像BitBlt一样的问题。

所以关键是 - 如果你不需要额外的功能,你可以使用更快的方法。现在提出这个问题 - 我对安全性知之甚少,或者更好地说出这些方法的“隐私”。对于我的研究,我需要保护“屏幕捕获”的事实,这些事实可能来自特洛伊人,rootkits,可能会窥探我的“行为”的程序。这对我来说是一个至关重要的条件。

我知道PrintScreen很容易被检测到,因为它模拟了PrintScreen按钮。这种情况下钩子(?不确定?)可能会暴露我的屏幕捕获动作。 BitBlt和CopyFromScreen对我来说似乎也不太可靠..剩下的就是SlimDX。据我了解,它从视频卡前端(可能是后面)缓冲区捕获屏幕截图。

那么你们怎么看待这些方法的“隐私保护”呢?哪一个更安全?

PS:如果我想要表现,我会每10分钟发送一次BitBlt并且过得很开心,但是对于我的研究,我需要最通用和最安全的方法,所以我不介意花费400ms进行屏幕捕获;欢呼。

0 个答案:

没有答案