截图功能在其他机器上不起作用
Posted
技术标签:
【中文标题】截图功能在其他机器上不起作用【英文标题】:Screenshot function does not work on other machines 【发布时间】:2019-04-30 14:36:22 【问题描述】:我正在尝试在窗口处于后台时截取窗口屏幕截图。该代码在我的系统(HP,win7)上完美运行。相同的代码无法在另一个系统(win7、联想和戴尔)上提供正确的输出。它确实提供了屏幕截图,但不清楚。窗口中的任何空白区域都是黑色的。 Click here to see image
def capture_screen(win_name,outloc,imagename,h):
hwnd = win32gui.FindWindow(None,win_name)
# Get window bounds
left, top, right, bot = win32gui.GetWindowRect(hwnd)
w = right - left
#h = bot - top
hwndDC = win32gui.GetWindowDC(hwnd)
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
saveDC = mfcDC.CreateCompatibleDC()
saveBitMap = win32ui.CreateBitmap()
saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)
saveDC.SelectObject(saveBitMap)
result = windll.user32.PrintWindow(hwnd, saveDC.GetSafeHdc(), 1)
#print(result)
bmp_info = saveBitMap.GetInfo()
bmp_str = saveBitMap.GetBitmapBits(True)
#print(bmp_str)
im = Image.frombuffer('RGB',(bmp_info['bmWidth'], bmp_info['bmHeight']),
bmp_str, 'raw', 'BGRX', 0, 1)
win32gui.DeleteObject(saveBitMap.GetHandle())
saveDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.ReleaseDC(hwnd, hwndDC)
if result == 1:
im.save(outloc+imagename)
【问题讨论】:
此代码仅适用于本机 win32 应用程序,例如记事本。某些应用程序(例如 Web 浏览器或 Windows 10 计算器)不是原生 win32,背景窗口的屏幕截图会失败。您必须将目标窗口置于最前面并截取整个桌面的屏幕截图。 感谢您回答@BarmakShemirani。我只是想知道它是如何在一个系统上工作而不是在另一个系统上工作的。 【参考方案1】:要捕获任何隐藏的窗口(Win32、UWP、...),您可以使用 DWM (DwmRegisterThumbnail)
【讨论】:
以上是关于截图功能在其他机器上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
htaccess 修改在某些页面上起作用,但在其他页面上不起作用?