none
如何高效获取WPF窗体的截图来自定义任务栏预览图和Aero peek 预览图 RRS feed

  • 问题

  • 任务栏预览和 aero peek预览 在WPF 中 使用的是TaskbarItemInfo 类属性进行设置, 但截取的任务栏预览图 必须在窗体的client area, 若此时我需要更新任务栏预览图为指定的UI可视化对象(此对象要求不显示出来,可以把该UI可视化对象放到窗体可视化区域外)的图片时,则TaskbarItemInfo的ThumbnailClipMargin无法满足。

    若使用DWM API 强制使用DWMWA_FORCE_ICONIC_REPRESENTATION 和 DWMWA_HAS_ICONIC_BITMAP 接受DWM消息传递指定hBitmap给DWM, 虽然可以实现显示指定图片为任务栏预览图和aero peek预览图, 但相对来讲则可以说是静态的。如果使用计时器执行DwmInvalidateIconicBitmaps 通知DWM刷新缓存同样可以实现类似与ThumbnailClipMargin设置的动态预览图, 但这种实现方法的性能很低(低配电脑影响比较大,主要可能和WPF窗体的截图方法的效率有关系)。

    不知道是否有比较高效的方法来获取指定WPF窗体的截图?

    *不知道是否有方法获取到窗体的共享纹理?
    • 已编辑 Vincky 2013年10月24日 16:42
    2013年10月23日 23:58

答案

  • 我用的就是RenderTargetBitmap的Render方法,但是效率不高。个人觉得最高效的应该是获取到d3d9的共享纹理,但不知道怎么做, DWM中未公开的两个API貌似可以获取到但试了一下获取到的是全黑的图片。

    *
    DwmpDxGetWindowSharedSurface

    DwmpDxUpdateWindowSharedSurface

    2013年10月25日 7:29

全部回复

  • Hi Vincky,

      欢迎来到MSDN中文论坛。

      你可以使用RenderTargetBitmap来获得目标区域的图片然后通过BmpBitmapEncoder来保存。

      具体你可以参考http://blog.sina.com.cn/s/blog_5a6102d00100lzh2.html。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年10月25日 2:29
    版主
  • 我用的就是RenderTargetBitmap的Render方法,但是效率不高。个人觉得最高效的应该是获取到d3d9的共享纹理,但不知道怎么做, DWM中未公开的两个API貌似可以获取到但试了一下获取到的是全黑的图片。

    *
    DwmpDxGetWindowSharedSurface

    DwmpDxUpdateWindowSharedSurface

    2013年10月25日 7:29
  • Hi Vincky,

      感谢你分享你的知识点。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年11月1日 9:44
    版主