骚操作,妈妈再也不用担心我看英文文献了 - 2.逻辑+代码

接上
骚操作,妈妈再也不用担心我看英文文献了 - 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】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值