很长时间没有更新了。有些有能力的爱好者想要我开源一下跟打器。前不久,我把老版跟打器的源码放到了 Github 上面。感兴趣的同学,可以去下载看看。

主页地址:

https://github.com/taliove/tygdq

这个版本的跟打器是 2012 年开发的,至2013年年初结尾。

中途基本上就没有更新了。很多代码都非常的初级,毕竟这是我的第一个作品。

阅读剩余部分

这个版本做了很久,但是一直没有发布。期间出去旅游了一趟,各位群友仍然很热心在跟我提,如果有需要测试的话,可以找他们。感谢你们的付出,这一版本得以如此快的出来

最新说明:

看到有很多人提到的 索引和长度必须引用该字符串内的位置 的问题,已经修复,请重新下载解决。

阅读剩余部分

为什么要自定义?

「添雨跟打器」中的核心功能之一——「词库管理」。这是一个大类。包含有词库添加、删除、自动提示,智能学习,理论码长等功能。用户在跟打过程中,如何以方便,快捷的方式提示给用户?这是一个产品体验上的问题。

早在「老版添雨跟打器」之中,@hwj 帮忙制作了「提词器」。使用的技术很简单,就是在 RichTextBox 上显示 Label ,用来划出不同的线条,颜色。但是缺点很明显。

阅读剩余部分

起因:

「添雨跟打器」中存在一个问题。在 windows 8/10 里面,输入法就获取不到了。我一直没有去管这样的问题。但是也大致知道,可能是 TSF 架构的问题。

阅读剩余部分

FARR 全称 Find And Run Robot。在快速启动软件属于排名靠前的。最强大的地方在于它的完全自定义。用户可以完全根据自己的喜好修改这款软件。而且有极其丰富的插件支持。几乎支持大部分流行语言如C#、JavaScript、C++等

经常关注 善用佳软,也经常关注快速启动。老实讲,我使用过善用佳软推荐的Altrun,使用过好几个年头。也一直期待着它的更新。但是几年过去了,仍然没有。因为这款软件虽然极其好用,也小巧。但是偶发性崩溃,配置丢失问题,是不能忍受的。

FARR 是我的备选,从未用过。于今年开始正式使用。我所需要的快速启动应该能够满足的需求是搜索、快速定位文件、即时翻译、计算以及打开收藏文件等。 Altrun 的主要功能便是“收藏”、“打开”和“快速定位”。它只此三个功能,便可以傲视群雄。 FARR在这三点上便不如。但是 FARR 优势在于搜索及其丰富的插件以实现你需要的功能。

废话不多说了。开始讲述制作翻译插件的内容。我使用的是 ecaradecFARR论坛 写的怎样使用 Javascript 开发 FARR 插件的教程。

使用 Javascript 开发的插件放置在目录 Plugins\CZB_pack

在其下新建文件夹:Plugins\CZB_pack\Taliove_Translate

在新文件夹下新建文件:fsubscript.js 最好直接拷贝插件目录下其它文件夹的这个文件

文件 fsubscript.js 内输入代码:

plugins["Taliove_Translate"] = {
    version: "1.0",
    lastChange: new Date(fso.GetFile(currentDirectory + "\\fsubscript.js").DateLastModified).toDateString(),
    displayName: "添雨翻译",
    directory: currentDirectory,
    icon: currentDirectory + "\\icon.ico", //此图片放在你的插件目录下即可
    aliasstr: "fy",
    description: "即时翻译",
    help: currentDirectory + "\\..\\help.html#open:[[Taliove Translate]]:HideMainMenu"
};

上述代码中的 aliasstr 为你的命令。当前设置为 fy 。即使用 fy xxx 来翻译xxx的内容

本插件使用的是百度翻译,前往百度翻译申请接入,然后下载百度翻译的 JS SDK ,将其中的 md5.js 拷贝到插件目录。接下来在 fsubscript.js 文件中插入如下代码:

(function () {
    var name = "Taliove_Translate";
    var js = plugins[name];
    var fyResult = "";
    var init = false;
    js.search = function onSearchBegin(querykey, explicit, queryraw, querynokeyword, modifierstring, triggermethod) {
        if (!explicit) return;
        var reg = new RegExp("^fy");
        var word = queryraw.replace(reg, "").trim();
        if (word) {
            var jsStr = "<p>翻译:" + word + "</p>" +
                "<p>结果:<span id='result'></span></p>" +
                "<script src='http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js'></script>" +
                "<script src='" + js.directory + "/md5.js'></script>" +
                "<script src='" + js.directory + "/func.js'></script>" +
                "<script type='text/javascript'>" +
                "$('#result').text('正在翻译,请稍候...');" +
                "fy('" + word + "').done(function(msg){" +
                "$('#result').text(msg);" +
                "});" +
                "</script>";
            showHTML(jsStr);
        } else {
            showHTML("请输入完整的值");
        }
    };
}());

在插件目录新增文件 func.js ,代码如下:

function getType(obj) {
    return obj == null ?
        String(obj) :
    {
        "[object Array]": "array",
        "[object Boolean]": "boolean",
        "[object Date]": "date",
        "[object Function]": "function",
        "[object Number]": "number",
        "[object Object]": "object",
        "[object RegExp]": "regexp",
        "[object String]": "string"
    }[Object.prototype.toString.call(obj)] || "object";
}

function fy(query, from, to) {
    var appid = '';//你接入百度翻译后的appid
    var key = '';//你接入百度翻译后的key
    var salt = (new Date).getTime();
    from = from || 'auto';
    to = to || 'auto';
    var str1 = appid + query + salt + key;
    var sign = MD5(str1);
    var def = $.Deferred();
    $.ajax({
        url: 'http://api.fanyi.baidu.com/api/trans/vip/translate',
        type: 'get',
        dataType: 'jsonp',
        data: {
            q: query,
            appid: appid,
            salt: salt,
            from: from,
            to: to,
            sign: sign
        },
        success: function (data) {
            var result = data["trans_result"];
            if (result) {
                def.resolve(result[0]["dst"]);
                return;
            }
            def.resolve('翻译失败');
        },
        error: function () {
            def.resolve("翻译失败");
        }
    });
    return def.promise();
}

至此,可以呼出 FARR 控制台,输入 fy 翻译,即可看到结果显示。