使用win32api python捕获屏幕截图返回黑色图像
我使用了以下代码示例来捕获屏幕截图: 当拍摄Firefox或chrome的屏幕截图时,他们会返回一个空白的黑色图像。捕获记事本的屏幕截图效果很好。我对此做了一些研究,我认为这是因为它们是gpu加速的。其他屏幕截图库也可以工作,但我需要它,这样我就可以捕获应用程序的屏幕截图,即使它当前不可见 有没有人解决过类似的问题,或者有人能给我指出正确的方向?谢谢。基于,我将C++代码转换为python,现在它可以工作了使用win32api python捕获屏幕截图返回黑色图像,python,winapi,screenshot,pywin32,win32gui,Python,Winapi,Screenshot,Pywin32,Win32gui,我使用了以下代码示例来捕获屏幕截图: 当拍摄Firefox或chrome的屏幕截图时,他们会返回一个空白的黑色图像。捕获记事本的屏幕截图效果很好。我对此做了一些研究,我认为这是因为它们是gpu加速的。其他屏幕截图库也可以工作,但我需要它,这样我就可以捕获应用程序的屏幕截图,即使它当前不可见 有没有人解决过类似的问题,或者有人能给我指出正确的方向?谢谢。基于,我将C++代码转换为python,现在它可以工作了 import win32gui import win32ui import win3
import win32gui
import win32ui
import win32con
from ctypes import windll
from PIL import Image
import time
import ctypes
hwnd_target = 0x00480362 #Chrome handle be used for test
left, top, right, bot = win32gui.GetWindowRect(hwnd_target)
w = right - left
h = bot - top
win32gui.SetForegroundWindow(hwnd_target)
time.sleep(1.0)
hdesktop = win32gui.GetDesktopWindow()
hwndDC = win32gui.GetWindowDC(hdesktop)
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
saveDC = mfcDC.CreateCompatibleDC()
saveBitMap = win32ui.CreateBitmap()
saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)
saveDC.SelectObject(saveBitMap)
result = saveDC.BitBlt((0, 0), (w, h), mfcDC, (left, top), win32con.SRCCOPY)
bmpinfo = saveBitMap.GetInfo()
bmpstr = saveBitMap.GetBitmapBits(True)
im = Image.frombuffer(
'RGB',
(bmpinfo['bmWidth'], bmpinfo['bmHeight']),
bmpstr, 'raw', 'BGRX', 0, 1)
win32gui.DeleteObject(saveBitMap.GetHandle())
saveDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.ReleaseDC(hdesktop, hwndDC)
if result == None:
#PrintWindow Succeeded
im.save("test.png")
请注意:Firefox使用
如果你想控制Firefox,你可能需要
有关详细说明,请参阅。记事本是Win32程序。Firefox和Chrome不是,你不能这样截图。您必须拍摄整个桌面的屏幕截图,确保目标窗口位于顶部,然后裁剪窗口区域。谢谢!很遗憾,你不能在使用标签的时候截图。