【发布时间】:2013-03-02 19:47:49
【问题描述】:
我对此有点迷惑。我们有一个 c#/WPF 屏幕捕获工具,它使用 Graphics.CopyFromScreen 抓取桌面的一部分。
它可以在几十种不同的机器上正常工作,包括 XP、Win7 和至少一个 Windows8 虚拟机。
我们遇到了一台装有 Win8 的 Acer ZS600,我们看到了我无法理解的奇怪效果。
当您拍摄时,它会抓取尺寸正确但位置错误的图像。它向顶部和左侧偏移。不是固定数额。当捕获窗口位于屏幕 0,0 位置时很好,但是当您将捕获窗口从原点移开时,偏移量会增加。
我查看了代码,发现窗口位置(this.Top 和 this.Left)报告了错误的数字。
更奇怪的是,我们已经在 Acer Z5771 上进行了尝试,这几乎是相同的硬件设置,只是它使用的是 Windows 7。我们尝试更新 Zs600 图形驱动程序,但没有任何效果。
是否有人理解这一点,或提出修复或解决方法?
编辑:我整理了一个简单的应用程序,在问题机器上显示效果。在我的开发机器上它工作正常。在这里下载:https://s3-eu-west-1.amazonaws.com/kdownload/Tools/CaptureTool_app.zip
或者下载编译后的版本:https://s3-eu-west-1.amazonaws.com/kdownload/Tools/capturetest.exe
编辑:这是问题系统上正在使用的捕获应用程序的两个屏幕截图。 https://s3-eu-west-1.amazonaws.com/kdownload/Tools/ProblemScreencap.png(编辑 - 在那个屏幕截图中,我用宽度和高度切换了 x&y 的显示数字,现在已在上传的代码中修复,请忽略此)
【问题讨论】:
-
你能不能尝试一些固定的数字,看看会发生什么?
-
尝试了固定数字。捕获部分抓取屏幕的右侧部分。问题是 wpf 窗口给了我错误的位置。
-
您能否创建另一个不可见的窗口作为您用作参考的肮脏黑客,如果它的 WPF 的位置使新窗口始终在左上角始终是静态的,例如并从中工作?
-
我上传了一些示例代码。稍后我会放一些截图。
-
检查您的系统 DPI。
标签: c# wpf windows-8 screen-capture