GoldenDictOCR ——给GoldenDict添加OCR取词和鼠标取词功能

同感,我的键盘快捷键多的都没法落脚了!!

LCtrl、LWin和LAlt单键双键的高辨识组合有14个,你们都用完了?所以你们是专业人士,我等是小白啊。

我等小白,只知道Ctrl+C和Ctrl+V这类固定的热的发冷的键,别的甚至连Win键也用不着。不过,把热键用完的人群占比能有0.1%吗?软件开发是面对那99.9%小白,还是这0.1%的专业人士?

我在弄一个GdCopyTool取词工具,正是考虑了小白的需求,弄出来极好用(最近两天突然来了灵感),如果最近没有类似的出来,估计我这套就很可能风靡一时,产生数千万拷贝。就是我在代码里写了讨伐獠的檄文,到时候会不会闹笑话,产生大动静?哈哈

我说话是和他说的,又不是和你,你这又何必?

我说话毫无讽刺之意,我本人确实是小白,对于程序,几乎一窍不通,编程是一边学,一边看。和你们这些人的水平,没法比,这是实情。

我不希望和人发生冲突,如果您误会了,说声抱歉。

互联网的精神是共享精神,您编的我可以拿去,我编的您也可以拿去,中间有任何误会,请相互谅解。这个论坛,我不希望像那个论坛一样。那就太令人失望了。

“nonwill” was exposed on Wikipedia :joy::

@Vim 双击取词有时候不灵敏,三次成功一次,你看下代码
; 双击鼠标左键取词
else if (A_priorHotKey = “~LButton” and A_TimeSincePriorHotkey < 450){
oldClipboard := Clipboard
gosub, GoldenDictCopy
}
return
#If

GoldenDictCopy:
Send ^c
Sleep 200
if (oldClipboard == Clipboard) {
return
}

这下面的是我以前用别人的代码只能双击单独取词,取词成功率是90%
~LButton::

Loop {
LButtonDown := GetKeyState(“LButton”,“P”)
If (!LButtonDown)
Break
}

WaitTime:=DllCall(“GetDoubleClickTime”)/4000
KeyWait, LButton, D T%WaitTime%
If errorlevel=0
GoSub, Routine
Return

Routine:
{

ifwinactive ahk_class CabinetWClass
{
return
}

clipboard =
send ,^c
ClipWait,1

StringLen, cliplen, clipboard
if cliplen > 20
{
;避免不是英文單字的東西送到GoldenDict去翻譯。
return
}

if cliplen < 2
{
;避免不是英文單字的東西送到GoldenDict去翻譯。
return
}

; send,{Ctrl down}cc{Ctrl up} 可用這行,也可用下行

run “C:\Program Files\GoldenDict++OCR-2A30-Qt-5.9.9-msvc-16.9.6-x64-20210607\GoldenDict.exe” %clipboard%

}

return

1、我这里测试都是可以的,详看下图演示。
2、是否有可能你查询的词典太多或太重,以致加载比较慢造成?我通常会建立一个简明的群组用于这种弹窗查询。
3、AHK在不同软硬件环境下的表现确实有些不可预测,可能需要根据实际情形微调,我这里只能根据我自己的条件尽量兼容。

DoubleClickDemo

GIF 2022-3-1 20-28-42
GIF 2022-3-1 20-28-42

请查看下我录的屏,双击取词成功率不高,另激活双击取词,会激活total commander的按名称自动搜索文件夹功能

建议在网页、pdf阅读器之类的环境下使用,在total commander环境中,就禁用这个功能(再次Ctrl+Alt+I)。确实有改进空间,可以设置黑白名单之类,但又增加了复杂性,还不如保持程序的简单性,按需“开关”这些功能。我做这样的封装,目的就是需要时快速启用、不需要时快速关闭。

我看你的截图,感觉是:你双击不同词汇的切换速度太快,而电脑打开GoldenDict太慢,跟不上你的手速,要么电脑硬件不够快,要么软件GoldenDict装载的词典太多或太重影响速度。

请禁用双击取词功能,仅使用GoldenDict原生的Ctrl+C+C,看看是否如你所愿?
AHK仅仅是模拟这个过程而已。

不是我电脑速度的问题,我还是用我之前的代码,你这个代码,双击有时候操作文件夹时会误操作复制!
深表感谢!

你不用不代表别人不用,

pda早期的ahk有检查当前窗口的命令,可以参考。
[9.15]GoldenDict & 欧路 取词完美版(AHK) - GoldenDict - 掌上百科 - PDAWIKI - Powered by Discuz!
quci.zip (1.4 KB)

        if(WinActive("Chrome") != win and WinActive("Firefox") != win and WinActive("Anki") != win and WinActive("编辑当前") != win and WinActive("浏览器") != win and WinActive("添加") != win and WinActive("GoldenDict") != win and WinActive("Aboboo") != win and WinActive("Acrobat") != win and WinActive("Word") != win){    ;判断当前所处的软件窗口
		  return
		}

关于鼠标取词的功能,GD 其实自带一个 (Ctrl+C)+C 连按就能弹出查词窗口,第一个 Ctrl+C 刚好就是复制。好像论坛里面提到过好几次取词的问题,但是都没有提到过这一点

特地感谢,只要能选取文本的,GoldenDict的快捷键好用;但对于图片或者图片类的pdf文件,这个工具才是利器!

发现了更好的方法:

  1. 背景:之前采用 Capture2Text.exe,会导致 OCR 取词和鼠标取词 两者不可同时使用,必须先切换到其中一个状态下,然后才能进行取词查询,这造成了复杂度。

  2. 新方法:舍弃 Capture2Text.exe,直接采用 capture + OCR 两个步骤来替代,Capture 可以用任意喜欢的软件完成,OCR也可以用任意喜欢软件完成,AHK 桥接它们。好处是,OCR 取词 和 鼠标取词 完全不冲突,不必切换状态,复杂度急剧下降,任意时刻均可一键启用 OCR取词或鼠标取词,而且OCR识别效果随着你使用现代的 OCR 引擎也会更好,用户体验直接拉满。

大家可以自行挑选喜欢的截图工具和 OCR 工具,让 AI 帮你缝合编写 AHK。

我的方案供参考,既可以完全使用Windows自带工具(极其轻量),也可以加入你喜欢的工具:

[Capture]
; 引擎优先级链:Primary|Fallback1|Fallback2|…
; 可用引擎: FSCapture, WinSnip
Engines=FSCapture|WinSnip

[OCR]
; 引擎优先级链:Primary|Fallback1|Fallback2|…
; 可用引擎: RapidOCR, Windows
Engines=RapidOCR|Windows

太抽象了,有谁能讲详细点吗?

pixpin这个常用

你只要把主要思路告诉 AI,AI 自然就知道如何处理了。

我没直接分享主要是因为:

  1. 我自己使用的版本已经全面升级到 AHK 2.x,并且整合到综合的AHK系统中,单独拆出来还得费一阵。
  2. 截图和OCR的引擎组合,每个人偏好不同,即使分享了,最多也就是个人偏好。

谢谢分享,已经在AI的帮助下弄好了。感谢!