有个需求,需要将手机截图放到word里面,之前都是通过手机截图、然后通过微信发送到电脑,再放到word里面,非常麻烦。
这两天有空了,做了一个小脚本,完美实现了快捷功能,使用自定义快捷键(ctrl alt -)复制手机当前屏幕(按完快捷键后等待大概3秒,脚本执行),把鼠标停留在需要粘贴的位置,按ctrl v截图就粘贴过去了
需要的环境,python3.6.5, adb工具(调试android设备的)
先用usb把手机连接到电脑,并打开调试模式,终端输入adb devices,显示如下为adb连接手机成功
总共需要两个文件
下面是screenshot.py 脚本的代码
。
#encoding=utf8
import win32clipboard as clip
import win32con
from PIL import Image
from io import BytesIO
import os, time, sys, subprocess
'''
往剪贴板中放入图片
'''
def setImage(data):
clip.OpenClipboard() #打开剪贴板
clip.EmptyClipboard() #先清空剪贴板
clip.SetClipboardData(win32con.CF_DIB, data) #将图片放入剪贴板
clip.CloseClipboard()
def screenshot(imagepath):
ex = subprocess.Popen("adb shell /system/bin/screencap -p /sdcard/screenshot.png", shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
ex.wait(5)
ex2 = subprocess.Popen("adb pull /sdcard/screenshot.png %s" % imagepath, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
ex2.wait(5)
def convertImg(imagepath):
img = Image.open(imagepath)
output = BytesIO()
img.convert("RGB").save(output, "BMP")
data = output.getvalue()[14:]
output.close()
return data
def getImgPath():
ts = time.time()
date = time.strftime('%Y%m%d%H%M%S', time.localtime(ts))
descimal = int((round(time.time()-int(time.time()),4) * 10000))
dir_path = "./screenshot/%s/%s/%s/" % (date[:4], date[4:6], date[6:8])
if not os.path.exists(dir_path):
os.makedirs(dir_path)
imagepath = '%s/%s.png' % (dir_path, descimal)
return imagepath
if __name__ == '__main__':
imagepath = getImgPath()
screenshot(imagepath)
# subprocess.Popen(, shell=True)
data = convertImg(imagepath)
setImage(data)
cmd运行这个脚本后,屏幕截图就已经在剪切板上了,使用ctrl V或者右键可以粘贴在word任意位置了
但是这种方式很不方便,每次截图还需要打开dos窗口执行python,有没有更简单的方式呢?
bat批处理
1、写一个批处理脚本screenshot.bat,放在python脚本同一个文件夹下,用来执行python脚本,内容如下
@echo off
start pythonw ./screenshot.py
exit
2、右键screenshot.bat文件,发送到桌面快捷方式,在桌面找到screenshot.bat快捷方式,右键-属性-快捷键(自己输入一个,不要与已有快捷键冲突)
大功告成
成功执行一次截图后会在python脚本的同级目录下生成一个文件夹screenshot(截图都会按日期分类保存到这个文件夹下)