基于AutoHotkey的智能翻译器

用AHK写的智能翻译器,支持查词和翻译

1.API接口

  • 词典接口:海词、词霸、有道。
  • 翻译接口:谷歌、百度、有道。

2.功能简述

  • 支持中英文自动识别,无需设置源语言和目标语言
  • 支持句子和单词自动识别,不需要其他切换操作
  • 未完待续···

3.使用方法

  • 第一步:选择需要查询的单词或者需要翻译的句子
  • 第二步:长按右键(或者按下快捷键window + c )直接查词或者翻译
  • 第三步:翻译完成后,在鼠标附近弹出窗口显示翻译结果,鼠标置于文字上,弹窗永不消失,离开弹窗一秒,窗口自动关闭
  • 第四步:在翻译结果文字上按下左键,会替换当前被翻译的内容;按下右键,则将结果复制到剪贴板

4.操作演示

操作演示

5.源代码

  • ①主函数
;@Ahk2Exe-SetMainIcon Icon\SmartTranslator.ico
;@Ahk2Exe-AddResource Icon\SmartTranslator.ico, 160  
;@Ahk2Exe-SetProductName SmartTranslator

;不显示托盘图标
;#NoTrayIcon
;跳过对话框, 自动替换旧实例
#SingleInstance force
;设置工作目录
SetWorkingDir %A_ScriptDir%
;不检查空变量是否为环境变量
#NoEnv
;启用或禁用可能产生错误的特定状况时的警告, 例如书写错误或缺少全局声明
;#Warn 
;让脚本保持后台运行
#Persistent
;防止用户的击键与发送的击键穿插在一起
SendMode Input  
/*
**********************************include Start*******************************************
*/

#include WinHttpRequests.ahk
#include TranslateAPI.ahk
#Include <Basic>

/*
**********************************include End*********************************************
*/



/*
**********************************Global start*********************************************
*/

Global TranslateResults := "Welcome to the SmartTranslator"
/*
**********************************global End*********************************************
*/

/*
**********************************Init Code Start*******************************************
*/
ShowWizard()
ConfingInit()
TrayInit()
return
/*
**********************************Init Code End*********************************************
*/

/*
**********************************User Code Start*******************************************
*/

#c::
    ClipboardAnalyze()
return 
$RButton::
    KeyWait, RButton, T0.25
    if (ErrorLevel = 1)
        ClipboardAnalyze()
    else
        Send, {
   RButton}
Return

ClipboardAnalyze()
{
   
	Global
	clipboard := ""
    send ^{
   c}
    ClipWait, 1
    Clipboard := StrReplace(Clipboard, "`r`n", " ")
    if RegExMatch(clipboard, "[一-鬼]")	;查找汉字.
    {
   
        ;中文模式
        dictOut := StrReplace(Clipboard, A_Tab)
        dictOut := StrReplace(dictOut, A_Space)
        if (strlen(dictOut) >3 || RegExMatch(dictOut, "[^一-鬼]") != 0 )
        {
      ;翻译模式
			TranslateResults := Select_Dict_Trans("Trans",dictOut)
        }
        Else
        {
      ;词典模式
			TranslateResults :=	Select_Dict_Trans("Dict",dictOut)
			if(strlen(Results) = 0)
				TranslateResults :=	Select_Dict_Trans("Trans",dictOut)
        }
    }
    else
    {
   
        ;英文模式
        dictOut := StrReplace(Clipboard, A_Tab)
        pos := RegExMatch(dictOut, "\s")
        pos += 1
        ;查找是否含有字母、空格之外的符号
        if (RegExMatch(dictOut, "[^a-zA-Z\s]", var) || RegExMatch(dictOut, "\s",, pos))	 
        {
      ;翻译模式
			TranslateResults := Select_Dict_Trans("Trans",dictOut)
        }
        Else
        {
      ;词典模式
			TranslateResults :=	Select_Dict_Trans("Dict",dictOut)
			if(strlen(TranslateResults)=0)
				TranslateResults :=	Select_Dict_Trans("Trans",dictOut)
        }

    }
   	GuiTip(TranslateResults)
	Clipboard := ""
    return
}

/*
**********************************User Code End*********************************************
*/

/*
**********************************Gui Code Start*********************************************
*/
/*
GUI内容显示
*/
;@Ahk2Exe-Bin ,,"UTF-8"
GuiTip(message := "Welcome to use the SmartTranslator!")
{
   
    Global varText := message
    If (StrLen(message)>=300) 
	{
   
		W_0 := "w950"
	} 
	Else If (StrLen(message)>=100) 
	{
   
		W_0 := "w700"
	} Else If (StrLen(message)>=55) 
	{
   
		W_0 := "w500"
	} Else
		W_0 := ""
    Gui, GuiTip:Destroy 
	Gui, GuiTip:+ToolWindow +HwndGuiTip_A -Caption +AlwaysOnTop border -DPIScale
	Gui, GuiTip:Color, cDDDDDD
	Gui, GuiTip:Font, s13 c2D2D2D Q5, 微软雅黑
	Gui, GuiTip:Margin, 5, 5
    Gui, GuiTip:Add, Text, X0 %W_0% gGuiTipText, %message%
    Gui, GuiTip:Font, s10 c333333 Q5, 微软雅黑
	CoordMode, Mouse
	MouseGetPos, Mu_XX, Mu_YY
	Gui_XX := Mu_XX+10, Gui_YY := Mu_YY+10
	Gui, GuiTip:Show, x%Gui_XX% y%Gui_YY%,GuiTip
    Gui, GuiTip:Show, x%Gui_XX% y%Gui_YY%,GuiTip
    SetTimer, GUISet, -1000
}
return
/*
替换动作标签(左键)
*/
GuiTipText:
ToolTip, 原文已被替换
SetTimer, Move_TT, -500
Gui, GuiTip:Destroy
Clipboard := varText
Send ^{
   v}
Sleep, 100
Clipboard := ""
return
/*
复制动作标签(右键)
*/
GuiTipGuiContextMenu:
ToolTip, 译文已被复制
SetTimer, Move_TT, -500
Gui, GuiTip:Destroy
Clipboard := varText
return
/*
GUI窗口管理,悬浮则保持,离开则关闭
*/
GuiSet:
MouseGetPos, mx,my
WinGetPos,  wx, wy, wd, wh,GuiTip
if((mx < wd) && (my < wh))
{
   
    SetTimer, GUISet, -500
}
Else
{
   
    Gui, GuiTip:Destroy
}
Return
/*
关闭提示
*/
Move_TT()
{
   
	ToolTip
	Return
}


/*
**********************************Gui Code End*********************************************
*/

/*
调用翻译和词典接口
*/
Select_Dict_Trans(mode:= "Trans",str := "hello")
{
   
	if(mode = "Dict")
	{
   
		DictChoice := Ini.Read("BasicSetting","DictChoice")
		if(DictChoice = 1)
			TheResults := Dict.Dict(str)
		if(DictChoice = 2)
			TheResults :=  Dict.Youdao(str)
		if(DictChoice = 3)
			TheResults :=  Dict.Ciba(str)
	}
	if(mode = "Trans")
	{
   
		TransChoice := Ini.Read("BasicSetting","TransChoice")
		if(TransChoice = 1)
			TheResults := Trans.Google(str)
		if(TransChoice = 2)
			TheResults := Trans.Youdao(str)
        if(TransChoice = 3)
			TheResults := Trans.Baidu(str)
	}
	return TheResults
}
/*
初始化配置文件
*/
ConfingInit()
{
   
	if !(FileExist("config.ini")) 
	{
   
		Ini.Write("BasicSetting","StartUp",False)
		Ini.Write("BasicSetting","DictChoice",3)
		Ini.Write("BasicSetting","TransChoice",3)
	} 
}
/*
托盘菜单初始化
*/
TrayInit()
{
   
	Menu, Tray, NoStandard
	Menu, Tray, Add, 设置, TraySetting
	Menu, Tray, Default, 设置
	Menu, Tray, Add, 关于, TrayAbout
    Menu, Tray, Add, 退出, TrayExit
	IniRead, OnStart, config.ini, Setting, StartUp ,0"
	if(OnStart = 1)
		Menu, Tray, Check, 开机自启
	return
}
/*
软件设置
*/
TraySetting()
{
   
	Global
	DictChoice := Ini.Read("BasicSetting","DictChoice")
	TransChoice := Ini.Read("BasicSetting","TransChoice")
	StartUpCheck := Ini.Read("BasicSetting","StartUp")
	Gui SettingGui:New
	Gui SettingGui:-MaximizeBox -MinimizeBox
	GUi SettingGui:Font, s10, Verdana
	Gui SettingGui:Add, GroupBox, w375 h100, 基本设置
	GUi	SettingGui:Add, Text, X20 Y35, 词典引擎
	Gui SettingGui:Add, DropDownList, X80 Y35 W70 vDictChoice AltSubmit Choose%DictChoice%, 海词|词霸|有道
	GUi	SettingGui:Add, Text,X20 Y70, 翻译引擎
	Gui SettingGui:Add, DropDownList, X80 Y70  W70 vTransChoice AltSubmit Choose%TransChoice%, 百度|谷歌|有道
	Gui SettingGui:Add, Checkbox, X200 Y35 vStartUpBtn Checked%StartUpCheck%, 开机自启动 
	Gui SettingGui:Add, GroupBox, X12 Y110 w375 h150, 高级设置
	GUi SettingGui:Add, Button, X80 Y268 W60 gSettingGuiOK, 确定
	GUi SettingGui:Add, Button, X160 Y268 W60 gSettingGuiCancel, 取消
	GUi SettingGui:Add, Button, X240 Y268 W60 gSettingGuiApply, 应用
	Gui SettingGui:Show, W400 H300 Center, 设置
	return

SettingGuiOK:
SettingGuiApply:
GUi SettingGui:Submit
Ini.Write("BasicSetting","StartUp"
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
AutoHotkey是一种自定义快捷键和自动化脚本的工具。通过双击AutoHotkey.exe运行AutoHotkey程序,并可以将其发送为桌面快捷方式,方便使用。 AutoHotkey可以实现连击、双击、重复按键等功能。这个工具可以使用autohotkeySciTE4AutoHotkey-Plus编辑器进行编写,但这不是必需的。如果您打算长期使用AutoHotkey,可以考虑使用这个编辑器。 通过AutoHotkey,您可以自定义快捷键,以方便您在计算机上快速执行特定的操作。同时,通过AutoHotkey,您还可以通过字母缩写打出一连串的句子,提高工作效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【笔记09】AutoHotkey 基础教程](https://blog.csdn.net/m0_54189068/article/details/125929258)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [autoHotkey — 连击/双击/重复 按键触发](https://blog.csdn.net/scy261983626/article/details/122852742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值