C# BitBlt和ElementHost在某些计算机上不工作
这是一个奇怪的问题 我正在使用C# BitBlt和ElementHost在某些计算机上不工作,c#,.net,wpf,bitblt,C#,.net,Wpf,Bitblt,这是一个奇怪的问题 我正在使用BitBlt将与我的(WinForms)窗口句柄关联的设备上下文复制到位图,它可以工作(或者我认为是这样) 但是有一台机器,ElementHost中的WPF元素没有显示在位图上:没有孔,就好像它们是透明的,后面的任何东西都会出现 我一直在玩一个虚拟机,一个工作,另一个没有。它们都有相同的操作系统版本,我已经缩减了安装的程序和功能,使两者都相同,但仍然有一个可以工作,另一个不能 有没有人遇到过这个问题,有没有人知道从哪里开始搜索 更新:感谢评论中的jsanalytic
BitBlt
将与我的(WinForms)窗口句柄关联的设备上下文复制到位图,它可以工作(或者我认为是这样)
但是有一台机器,ElementHost中的WPF元素没有显示在位图上:没有孔,就好像它们是透明的,后面的任何东西都会出现
我一直在玩一个虚拟机,一个工作,另一个没有。它们都有相同的操作系统版本,我已经缩减了安装的程序和功能,使两者都相同,但仍然有一个可以工作,另一个不能
有没有人遇到过这个问题,有没有人知道从哪里开始搜索
更新:感谢评论中的jsanalytics提示,我发现是Aero停止了屏幕截图的正常工作。现在要找出原因和解决方法…这不是答案,但目前对我有效:
如果
返回true,然后不是
BitBlt
ing窗口的设备上下文,而是IBitBlt
整个桌面,但裁剪到窗口的大小(使用GetWindowRect
并根据大小调整创建的位图,然后将左上方传递到BitBlt
)。我曾建议GetLastWin32Error()
,但从未收到OP@jsanalytics的回复,谢谢。所以我可以确认是Aero造成了差异(off=有效,on=无效)。请问您得到的错误代码是什么?@jswell。。。没有帮助…:)谢谢你让我知道。
[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern int DwmIsCompositionEnabled(out bool enabled);