0%

CopyActionDaemon开发记录

本文对应项目:https://github.com/ravenxrz/CopyActionDaemon

1. 初心

CopyTranslator真的是一个非常良心的文献阅读翻译软件,但或许是功能越来越多的原因,CopyTranslator也出现了一些bug。比如在”拖拽翻译“功能上,就可能出现明明已经划词,但是Copytranslator没有反应的情况。

如,在对照模式下:

这里已经勾选了“拖拽复制”功能,但是却没有效果,同样的情况也发生在专注模式下:

CopyActionDaemon则是为了解决这个feature bug而开发的。当然了,CopyTranslaor仍在更新迭代中,所以这个Project很可能要不了多久就作废了。

另外:

由于个人不会js的相关技术,所以最终采用了自己比较熟悉的java来实现。但java是依赖jre的,所以对没有安装jre的小伙伴来说就不太友好了。

2. 使用

效果

拖拽翻译:

双击翻译:

如何使用?

进入 release页面下载CopyActionDaemon.jar。

提示,一定要确保电脑有jre环境。

然后,打开cmd窗口,执行:

1
2
cd 到CopyActionDaemon.jar的路径下去
java -jar CopyActionDaemon.jar

如:

image-20200427202255644

使用Ctrl+C结束进程。

如果现在后台运行jar包,可致性:

1
javaw -jar start CopyActionDaemon.jar

但是后者要想结束进程就没那么容易了,可以通过”资源监视器“来结束进程。

image-20200427202939388

总体来说,推荐第一种使用方法,因为方便开关,要结束Ctrl+C,要重新开始,按一下上再回车即可。

3. 开发过程

因为CopyTranslator的这个feature bug,其实弄得我挺糟心的,因为我太懒了,看文献的时候就是不想手动按Ctrl C。所以中途还上网找了两个其它方案–知云和scitranslate,但是它们两个的官网做得实在是一言难尽,且它们固定了pdf软件,而它们pdf不满足我的要求(全屏+只定义背景色)。所以我尝试了小半天,还是回到了CopyTranslator的阵营。

于是为了解决CopyTranslator的这个”拖拽翻译“的bug,就有了这个小项目。

解决的思路其实很简单,虽然我不懂JS,但是CopyTranslator应该是监听系统clipboard的变化,然后从clipboard中读数据进行翻译。也就是说,我需要做的就仅仅是把给clipboard喂数据就行了。

image-20200427204951530

最开始想着用Qt来做,但是没想到Windows没有提供这样的Api(获取选中的文本),于是只能曲线救国:监听鼠标的按下和释放过程,在释放的时候模拟Ctrl+C,这样就行把选中的文本复制到剪贴板中了。结果Qt的模拟按键我没有找到合适的方法,主要还是自己把Qt给忘得差不多了。所以最终选择了java来做。

因为java本身是不支持全局监听鼠标的,所以这里用到了开源库:

  • jnativehook

另外,因为我没有mac的电脑,所以没法测试,mac用户如果需要使用,只需要修改

1
2
3
4
5
6
7
8
9
10
 // copymethods/CopyRobot.java
public synchronized void triggerCopy(){
// CONTROL换Command
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_C);
robot.delay(robot.getAutoDelay());
robot.keyRelease(KeyEvent.VK_C);
// CONTROL换Command
robot.keyRelease(KeyEvent.VK_CONTROL);
}
文章对你有帮助?打赏一下作者吧