最近项目中想实现截屏功能,使用的笔记本是高清屏,实际屏幕设置成了150%,所以在截屏的时候遇到个各种问题。

最开始使用PIL ImageGrab来截取屏幕,如果本来是100%的设置没有问题,能截取到全屏,但是150%或者其他设置的就会有问题,只能截取到屏幕的左上部分,无法截取到全屏。

from PIL import ImageGrab

pic = ImageGrab.grab()

# print(pic.size)

pic.save(r'C:\Users\test\Desktop\Automation\python\pic.jpg')

但是这个问题很奇怪,也有的机器150%设置,但是执行后没有问题。

遇到这个问题后看到网上有个解决方法:在注册表中Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers添加python.exe和pythonw.exe路径信息进去,再次执行程序就能截取到全屏,用python代码添加注册表的话,要重新再次运行程序才能截取到全屏:

from PIL import ImageGrab

import winreg

reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)

key = winreg.OpenKey(reg, r'Control Panel\Desktop\WindowMetrics')

# print(winreg.QueryValueEx(key, 'AppliedDPI'))

if winreg.QueryValueEx(key, 'AppliedDPI')[0] != 96:

key.Close()

key = winreg.OpenKey(reg, r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers', 0, winreg.KEY_ALL_ACCESS)

winreg.SetValueEx(key, r'C:\Users\test\AppData\Local\Continuum\anaconda3\pythonw.exe', 0, winreg.REG_SZ, 'HIGHDPIAWARE')

winreg.SetValueEx(key, r'C:\Users\test\AppData\Local\Continuum\anaconda3\python.exe', 0, winreg.REG_SZ, 'HIGHDPIAWARE')

key.Close()

reg.Close()

pic = ImageGrab.grab()

# print(pic.size)

pic.save(r'C:\Users\test\Desktop\Automation\python\pic.jpg')

考虑到以后会用到其他机器上,每次都需要执行2次才能截取到全屏,就弃用了此方法。

后来使用pyautogui来截取全屏,一般没有安装pyautogui,需要先安装:

pip install pyautogui

import pyautogui

img = pyautogui.screenshot()

img.save(r'C:\Users\test\Desktop\Automation\python\pic_pyautogui.jpg')

但是如果笔记本还有连接外接显示器,是截取不到外显上内容的,只能截取笔记本显示器上的内容。如果要截取到外显上内容,想到使用win32方法来实现按键盘上的截屏功能,从而来实现抓取全屏带外显内容:

import win32api

import win32con

from PIL import ImageGrab

win32api.keybd_event(win32con.VK_SNAPSHOT, 0)

im = ImageGrab.grabclipboard()

im.save(r'C:\Users\test\Desktop\Automation\python\pic_screenshot.jpg')

python截屏_Python: 截屏相关推荐

  1. python 几种android截屏方式的学习与使用

    python 几种android截屏方式的学习与使用 screencap screencap是Android的截屏工具.通过调用访问SurfaceFlinger服务或读取 /dev/graphics/ ...

  2. android 截长图 方法,Android实现截屏与截长图功能

    本文实例为大家分享了Android实现截屏与截长图功能展示的具体代码,供大家参考,具体内容如下 Demo在GitHub的地址:ScreenShoot 在Android开发中,有时候会遇到需要截屏分享到 ...

  3. 华为手机截屏怎么截长图_华为手机竟然有6种截屏方法,你用过几种?3种以上的手机没白买...

    很多时候我们都喜欢通过手机截图来对一些信息进行保存分享,那么常用华为手机,关于华为手机截图方法你知道几种呢? 悄悄告诉你,其实华为手机截图方法多达6中,各种花样截图方法都有,就是可惜了很多小伙伴都不知 ...

  4. 笔记本电脑截屏怎么截_电脑的截屏与录屏

    电脑的截屏与录屏 相信大家都知道 QQ的截屏和录屏快捷键:截屏:Ctrl+Alt+A录屏:Ctrl+Alt+S 这种方便快捷的方式非常受人欢迎,但是万一我们的电脑上没有下载或打开QQ,我们该怎么办呢? ...

  5. iOS 防止录屏和截屏的监听

    iOS实现不了不让截屏或者录屏,但是提供的截屏或者录屏的监听方法,我们也可以通过监听方法来拿到截屏的图片,为此参考了支付宝和微信支付时,截屏的处理方式. 通过上图发现,其实图片都已经保存到本地相册中, ...

  6. iOS 防止截屏、录屏技术

    0x00 直接看图 看图演示,可防止截屏和录屏 可以开启或者关闭,是否允许截屏和录屏 0x01 代码 JHNonRecordableView *view1 = [[JHNonRecordableVie ...

  7. 禁止APP录屏和截屏

    Android安全:禁止APP录屏和截屏 一.前言: Android有些APP会为了安全,禁止录屏和截屏,例如:金融.银行相关的.禁止录屏和截屏并不难,只需要在 Activity 的onCreate( ...

  8. Android安全:禁止APP录屏和截屏

    Android有些APP会为了安全,禁止录屏和截屏,例如:金融.银行相关的.禁止录屏和截屏并不难,只需要在 Activity 的onCreate() 方法中添加一行代码即可: getWindow(). ...

  9. Android实现截屏和截长图功能的几种方法

    一般情况下各种型号的手机都会有自带的截屏功能,也会有诸如"开关机键+音量键"的截屏快捷键,只要手机是亮屏状态,都会将手机屏幕的可视区域(包含状态栏)全部截取下来. 如果开发中想要调 ...

最新文章

  1. 自己动手写一个印钞机 第四章
  2. python开发好学吗-python软件开发好学吗
  3. 深度学习中张量flatten处理(flatten,reshape,reduce)
  4. 视差图转为深度图_Parallax Mapping视差映射:模拟冰块
  5. android enum 内存,Android 中的 Enum 到底占多少内存?该如何用?
  6. 从Client应用场景介绍IdentityServer4(一)
  7. 非985,计算机专业的大学生该如何自学编程?
  8. [VTK]VTK的三维模型保存、读取之保存为vtk格式
  9. 「SCOI2015」小凸想跑步 解题报告
  10. 爬虫调用百度翻译API
  11. 使用FastReport 3.0及以上版本创建动态报表的几个技巧(转)
  12. Android “Theme.AppCompat.Light”解决方法
  13. thinkphp5.0 session驱动方式问题汇总
  14. Skiing POJ 3037 很奇怪的最短路问题
  15. 前端 express使用教程
  16. qtabwidget设置表头_QTableWidget添加表头菜单 并 可以通过表头菜单隐藏选中列
  17. pip国内镜像(清华大学镜像)
  18. 【C语言】动态内存开辟的使用『malloc』
  19. java短视频开发技术_看Java学员如何用前后端分离技术搭建短视频健身APP
  20. 一个无需会员就可以看Netflix的安卓App

热门文章

  1. C51单片机 AT89S52 定时器使用方法及总结
  2. 软件项目规划大纲知识点
  3. noip模拟赛 终末
  4. window——生成ssh密钥
  5. EasyPoi导出Excel实现标记颜色
  6. zxing换行_让文字自动换行
  7. 系统安装部署系列教程(一):安装原版系统镜像
  8. word2vec的应用:gensim相似度检测(附代码)
  9. 用命令提示符打开资源管理器目录
  10. unity全局总的音频管理器