我正在尝试抓取(截屏)分层窗口,但它似乎无法正常工作。一些分层窗口工作正常,有些则不然。以下是我的做法:
IntPtr display_dc = GetDC(IntPtr.Zero);
IntPtr bitmap_dc = CreateCompatibleDC(display_dc);
IntPtr bitmap = CreateCompatibleBitmap(display_dc, rect.Width, rect.Height);
IntPtr null_bitmap = SelectObject(bitmap_dc, bitmap);
IntPtr window_dc = GetWindowDC(Handle);
BitBlt(bitmap_dc, 0, 0, rect.Width, rect.Height, window_dc, 0, 0,
TernaryRasterOperations.SRCCOPY | TernaryRasterOperations.SRCPAINT);
ReleaseDC(Handle, window_dc);
SelectObject(bitmap_dc, null_bitmap);
DeleteDC(bitmap_dc);
using (Bitmap temp = Bitmap.FromHbitmap(bitmap))
{
temp.Save(String.Format(@"C:\{0}_test.bmp", Handle.ToString("x")));
}
DeleteObject(bitmap);
ReleaseDC(IntPtr.Zero, display_dc);
问题是,当通过 UpdateLayeredWindow 更新分层窗口时,我得到了通过 SetLayeredWindowAttributes 创建的窗口的正确图像和黑色位图。有人可以告诉我,我们是否有办法通过 UpdateLayeredWindow win api 调用来抓取更新的分层窗口?
到目前为止,我的解决方法是截取整个屏幕的屏幕截图,然后从中复制窗口位图,问题是窗口应该始终位于顶部才能正常工作。
TIA