以下是我的代码:
import sys
import win32gui
import win32ui
import win32con
from time import sleep
from datetime import datetime
def get_windows_bytitle(title_text):
def _window_callback(hwnd, all_windows):
all_windows.append((hwnd, win32gui.GetWindowText(hwnd)))
windows = []
win32gui.EnumWindows(_window_callback, windows)
return [hwnd for hwnd, title in windows if title_text in title]
def screenshot(hwnd, filename):
l,t,r,b = win32gui.GetClientRect(hwnd)
h = b - t
w = r - l
hDC = win32gui.GetDC(hwnd)
myDC = win32ui.CreateDCFromHandle(hDC)
newDC = myDC.CreateCompatibleDC()
myBitMap = win32ui.CreateBitmap()
myBitMap.CreateCompatibleBitmap(myDC, w, h)
newDC.SelectObject(myBitMap)
win32gui.SetForegroundWindow(hwnd)
sleep(.2) #lame way to allow screen to draw before taking shot
newDC.BitBlt((0,0),(w, h) , myDC, (0,0), win32con.SRCCOPY)
myBitMap.Paint(newDC)
myBitMap.SaveBitmapFile(newDC, "c:\bla.bmp")
def main():
try:
hwnd = get_windows_bytitle("Chrome")[0]
except IndexError:
print("Chrome window not found")
sys.exit(1)
screenshot(hwnd, str(datetime.now().microsecond) + ".bmp")
if __name__ == "__main__":
main()
它在一台电脑上运行得很好,但现在在我的笔记本电脑上运行会由于某种原因引发以下错误:
win32ui.error: CreateFile
在网上找不到任何有关该异常的信息。。。为了记录在案(如果有区别的话),我在这台笔记本电脑上安装了winapi,使用了pypi的以下软件包:
pip install pypiwin32
因为安装常规pywin32不起作用。此外,现在我想起来了,这台机器是Windows 8.1,而不是运行良好的机器上的Windows 7。
有什么想法吗?
C:
上一定存在一些权限问题,因此它一定失败了。创建临时文件夹(或任何你喜欢的名称)并修改你的代码,如下所示
myBitMap.SaveBitmapFile(newDC, "c:\temp\bla.bmp")
注意:确保临时文件夹存在。