熟悉api的请帮忙看看,用的win32gui,win32ui截图
pyqt吧
全部回复
仅看楼主
level 1
homecat_lulu 楼主
每次用完api都释放资源,但是只能截到第一次的图。
源码:
import datetime
import sys, os
import win32con
import win32gui
import win32ui
from PyQt5 import QtCore
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QIcon
from PyQt5.QtWebEngineWidgets import QWebEngineSettings, QWebEngineView, QWebEnginePage
from PyQt5.QtWidgets import *
from PIL import Image
import pytesseract
def currenttime_capture(self, filename, x, y, w, h):
try:

# hwnd = 0 #
窗口的编号,0号表示当前活跃窗口
hwnd = win32gui.FindWindow(None, 'PP')
hwndDC = win32gui.GetWindowDC(hwnd) # 根据窗口句柄获取窗口的设备上下文DC(Divice Context)
mfcDC = win32ui.CreateDCFromHandle(hwndDC) # 根据窗口的DC获取mfcDC
saveDC = mfcDC.CreateCompatibleDC() # mfcDC创建可兼容的DC
saveBitMap = win32ui.CreateBitmap() # 创建bigmap准备保存图片
saveBitMap.CreateCompatibleBitmap(mfcDC, w, h) # 为bitmap开辟空间
saveDC.SelectObject(saveBitMap) # 高度saveDC,将截图保存到saveBitmap中
saveDC.BitBlt((0, 0), (w, h), mfcDC, (x, y), win32con.SRCCOPY) # 截取从左上角(0,0)长宽为(w,h)的图片
saveBitMap.SaveBitmapFile(saveDC, filename)
# GetDC或GetWindowDC获得的DC要使用ReleaseDC释放
# Create得到的DC要用Delete释放
# Free Resources
win32gui.DeleteObject(saveBitMap.GetHandle())
saveDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.ReleaseDC(hwnd, hwndDC)
image = Image.open(filename)
curdt = pytesseract.image_to_string(image, lang='chi_sim')
os.remove(filename)
return curdt
except Exception as e:
self.log.append(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') + ":" + e.__str__())
return ""
class MyBrowser(QWebEnginePage):
def userAgentForUrl(self, url):
return "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
class Web(QWebEngineView):
def __init__(self):
super().__init__()
self.resize(670, 760)
self.settings().setAttribute(QWebEngineSettings.PluginsEnabled, True)
self.settings().setAttribute(QWebEngineSettings.JavascriptEnabled, True)
def load(self, url):
self.setUrl(QUrl(url))
def adjustTitle(self):
self.setWindowTitle(self.title())
def disableJS(self):
settings = QWebEngineSettings.globalSettings()
settings.setAttribute(QWebEngineSettings.JavascriptEnabled, False)
class Main(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(0, 0, 1170, 920)
self.setWindowTitle('PP')
# self.setWindowIcon(QIcon('icons/icon.png'))
web = Web()
# web.resize(750, 730)
# web.settings().setAttribute(QWebEngineSettings.PluginsEnabled, True)
web.load("http://www.smb.gov.cn/index.html")
self.btn1 = QPushButton("获取当前时间", self)
self.btn1.setGeometry(QtCore.QRect(10, 50, 75, 23))
self.btn1.setObjectName("pushButton")
self.log = QTextEdit(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') + ": " + "程序启动", self) # time.localtime(time.time())
# self.log.setReadOnly(True)
self.btn1.clicked.connect(self.capture_currenttime_Clicked)
# self.btn.resize(self.btn.sizeHint())
# self.btn.setGeometry(100, 20, 100, 20)
lay = QHBoxLayout(self)
lay_l = QVBoxLayout(self)
lay_r = QHBoxLayout(self)
lay.addLayout(lay_l)
lay.addLayout(lay_r)
lay_l.addWidget(web)
lay_l.addWidget(self.log)
lay_r.addWidget(self.btn1)
def capture_currenttime_Clicked(self):
try:
# text = self.sender().text()
fname = "capture//CurrentDateTime" + datetime.datetime.now().strftime('%Y%m%d%H%M%S.%f') + ".jpg"
curdt = currenttime_capture(self, fname, 19, 42, 200, 25) # x, y, w, h
self.log.append(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') + ": 截取当前时间成功!")
# image = Image.open(fname)
# curdt = pytesseract.image_to_string(image, lang='chi_sim')
self.log.append(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') + ": 截取当前时间识别:" + curdt)
except Exception as e:
self.log.append(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') + ":" + e.__str__())
app = QApplication(sys.argv)
# web = Web()
main = Main()
main.show()
app.exec_()
sys.exit(app.exec_())
2018年09月09日 13点09分 1
level 1
楼主解决了吗?遇到了同样的问题
2019年04月23日 11点04分 2
level 1
哪学的呢
2019年08月25日 10点08分 3
1