篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 自动化解决 windows 中英文切换快捷键失效问题相关的知识,希望对你有一定的参考价值。
windows11 中英文切换快捷键突然没返应了,之前是五笔输入法中文自动上屏,更新过一次后,中英文切换快捷键也失效了。官方也不知道什么时候修复,每次切换都要用鼠标点一下,太麻烦了,于是想用 pthon 自动化模拟鼠标单击。实现逻辑:当程序打开后,监听快捷键 ctrl + space 然后模拟鼠标在任务栏的语言指示图标所在的坐标上单击一下,然后鼠标再退回到原来位置。
我也是边学边做,遇到问题了就查资料,改了几版,最后才成了满意的版本,能在系统托盘运行,方便开启和停止。经过这次实践,感觉 python 越来越好玩了。python 学点基础语法,然后就是边查边学各种工具库的使用,作为工具,基本上这样就可以了。
import pyautogui
import keyboard
import pystray
from PIL import Image
# 打包成 exe
# pyinstaller --noconsole --add-data="d:\\icon.png;." app.py
# --noconsole 不显示 cmd 窗口
# --add-data="d:\\icon.png;." 添加其他资源 将 d:\\icon.png 添加到程序根目录
class App(object):
def position(self, hotkey=\'ctrl+windows+x\'):
\'\'\'注册快捷键,获取当前坐标\'\'\'
keyboard.add_hotkey(hotkey, lambda: pyautogui.alert(pyautogui.position(), title=\'当前坐标\', button=\'OK\'))
return self
def switchInput(self):
\'\'\'中英文切换\'\'\'
def click():
x, y = pyautogui.position()
pyautogui.click(1720, 1056) # 坐标位置,可根据实际情况修改,可通过 position 方法获取坐标
pyautogui.moveTo(x, y) # 还原位置
keyboard.add_hotkey(\'ctrl+space\', click) # 注册快捷键
return self
def start(self):
\'\'\' 在系统托盘运行 \'\'\'
pystray.Icon(\'test\', icon=Image.open(\'icon.png\'), menu=pystray.Menu(
pystray.MenuItem(\'关闭\', lambda icon, item : icon.stop())
)).run()
if __name__ == \'__main__\':
App().position().switchInput().start()
下面假设原文件(也就是打算切白边的文件)叫abc.pdf
- pdfcrop abc.pdf,默认会生成abc-crop.pdf文件,这个已经是切掉白边的了,要是你不嫌它大(或者它确实不大)的话,就完成了。
- 用阅读器(如evince)打开abc-crop.pdf,并通过CUPS打印到文件,打印时注意关闭所有和页面缩放有关的命令,并选中“使用文档的页面尺寸作为页面尺寸”。打印,完成。
说明:
- pdfcrop其实是TeXLive自带的。本质上是一个perl脚本。
- pdfcrop要调用gs(ghostscript)确定每页的白边大小。对于空白页,会报错,忽略即可。
- pdfcrop还可以在切的时候留若干像素,具体请–help。
- pdfcrop要调用pdftex以生成切白边后的文件。
- pdfcrop本质上(猜想,没有阅读源码)是先将abc.pdf展开成单页的pdf,调用gs切白边,再用tex文件直接调用pdf页面,最后用pdftex生成输出。
- pdfcrop直接生成的文件一般是原文件的20倍以上(本人测试的几个文件均是如此),虚拟打印到新的文件后,基本可以恢复到与原文件同样数量级的尺寸。
- 测试都是使用的内嵌字体的中英文PDF。扫描版的没试,估计够呛。
附一个类似的eps版工具
首先用下面的命令来去除白边。因为是程序来做的,去除白边的效果甚至比人自己做好:
epstool --copy --bbox input_file.eps input_file_temp.eps
第二步也是最后一步,将eps图像转成pdf,也只需要一行命令
epstopdf --hires --outfile=output.pdf input_file_temp.eps
这样就完成了eps到pdf的转换了。
上述的操作流程可以写成一个脚本
epstool --copy --bbox $1 my_epstopdf_temp.eps
epstopdf --hires --outfile=$2 my_epstopdf_temp.eps
rm my_epstopdf_temp.eps