Skip to main content
 首页 » 编程设计

python之获取 win32ui.error : CreateFile when trying to save a screenshot with python and winapi

2024年10月25日29落叶无声

以下是我的代码:

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() 

它在一台 PC 上运行良好,但现在在我的笔记本电脑上运行时出于某种原因会引发以下错误:

win32ui.error: CreateFile 

无法在线找到有关该异常的任何信息...作为记录(如果它有所不同)我使用以下来自 pypi 的软件包在这台笔记本电脑上安装了 winapi:

pip install pypiwin32 

因为安装常规的 pywin32 不起作用。 另外,现在我想起来了,这台机器是 Windows 8.1,而不是运行良好的机器上的 Windows 7。

有什么想法吗?

请您参考如下方法:

一定是 C:\ 上存在一些权限问题,因此一定是失败了。创建临时文件夹(或您喜欢的任何名称)并修改您的代码,如下所示

myBitMap.SaveBitmapFile(newDC, "c:\\temp\\bla.bmp") 

注意:确保临时文件夹存在。