接上 骚操作,妈妈再也不用担心我看英文文献了 - 1.功能介绍
整个项目其实很简单,原理就是:
选中英文,复制到剪切板,通过百度翻译接口转换成中文,找到软件窗体句柄,发送中文,激活朗读功能。
选中(4声)英文,需要手动选中。复制到剪切板,用的是pynput模块,它可以模拟键盘输入和鼠标点击,很强。所以只需要执行Ctrl+C键就可以完成。关于pynput不需要太深入,看 Python控制键盘鼠标pynput的详细用法 就可以了。通过百度翻译接口转换成中文,直接调接口,放到下一节里面讲。找到软件窗体句柄。这个需要用到spy++,可以看 Spy++ —— 窗口、消息查看分析利器 ,用python找到对应窗口句柄,可以看 如何利用Python和win32编程避免重复性体力劳动(一)——开始、FindWindow和FindWindowEx,他这一系列的都还不错。 其中有一点要注意,找到主窗口后再找子窗口,首先你要知道子窗口(里面有文本内容的)的句柄,然后通过my_hwnd = kids[224] #第x个是我要找的窗口找到,每个电脑可能不一样,这需要你改动。理解了原理相信很简单。发送中文到文本框。 win32api.SendMessage(my_hwnd, win32con.WM_SETTEXT, None, mystr)可以完成。激活朗读功能。相当于又按一次f1,当然你首先要设置朗读时就是f1热键激活,把其他设置全关了。有个小点要注意,先点击一下左键再按f1取消选中,这样就可以朗读文本框内容,否则会直接朗读选中的英文。(而英文读起来比较怪,听不懂) # -*- coding: utf-8 -*- import time import win32gui import win32con import win32api from pynput import keyboard import pynput.mouse import pyperclip #剪切板 from baidu_translate import translateToChinese # mystr = "你好啊,世界!" def sendMessageToWindow(mystr): kids = [] count = 0 def all_ok(hwnd, param): # global count # print("%x "%hwnd, count, end='。');count+=1 kids.append(hwnd) return True parent_hwnd = win32gui.FindWindow(None,u"朗读女 8.992") #print("parent:%x"%parent_hwnd) win32gui.EnumChildWindows(parent_hwnd, all_ok, None) my_hwnd = kids[224] #第x个是我要找的窗口 #print("my_hwnd:%x "%my_hwnd) win32api.SendMessage(my_hwnd, win32con.WM_SETTEXT, None, mystr) # print("send message,finish!") print("译文:",mystr) kbd = keyboard.Controller() mouse = pynput.mouse.Controller() def _control_C(): #control + C 复制 kbd.press(keyboard.Key.ctrl_l) kbd.press('c') time.sleep(0.1) kbd.release('c') kbd.release(keyboard.Key.ctrl_l) def _f1(): #按下f1 kbd.press(keyboard.Key.f1) time.sleep(0.1) kbd.release(keyboard.Key.f1) def on_press(key): if key==keyboard.Key.f2: execute() def on_release(key): pass def execute(): #print("hello") # 复制 _control_C() #粘贴 mystr = pyperclip.paste() print('English:', mystr) # 翻译 chinese_str = translateToChinese(mystr) sendMessageToWindow(chinese_str) #点击一下防止直接念英文 mouse.click(pynput.mouse.Button.left) #朗读 _f1() print('==='*30,'\n') if __name__=="__main__": with keyboard.Listener(on_press=on_press, on_release=on_release) as listener: listener.join()看英文系列【全】: 骚操作,妈妈再也不用担心我看英文文献了 - 1.功能介绍 骚操作,妈妈再也不用担心我看英文文献了 - 2.逻辑+代码 骚操作,妈妈再也不用担心我看英文文献了 - 3.翻译接口+打包执行 源码连接: https://github.com/JizhiXiang/bestEngToChiSpeaker 【感觉有意思,点个赞呗,算对我分享东西的肯定,thx】