├── .github ├── ISSUE_TEMPLATE │ ├── Bug_Report.md │ ├── Feature_Request.md │ └── TODO.md └── workflows │ └── build.yml ├── .gitignore ├── About.jpg ├── AliyunRequestHandler ├── .gitignore ├── index.js ├── package-lock.json ├── package.json └── test.js ├── ArtificialTransHelperLibrary ├── ArtificialTransHelper.cs ├── ArtificialTransHelperLibrary.csproj └── Properties │ └── AssemblyInfo.cs ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── DictionaryHelperLibrary ├── DictionaryHelperLibrary.csproj ├── IDict.cs ├── Properties │ └── AssemblyInfo.cs └── XxgJpzhDict.cs ├── KeyboardMouseHookLibrary ├── FindWindowInfo.cs ├── GlobalHook.cs ├── GlobalHotKey.cs ├── KeyboardMouseHook.cs ├── KeyboardMouseHookLibrary.csproj └── Properties │ └── AssemblyInfo.cs ├── KeyboardMouseMonitor ├── KeyboardMouseMonitor.cpp ├── KeyboardMouseMonitor.vcxproj ├── KeyboardMouseMonitor.vcxproj.filters ├── pch.cpp └── pch.h ├── LICENSE ├── MecabHelperLibrary ├── MecabHelper.cs ├── MecabHelperLibrary.csproj ├── NoWordSplit.cs ├── Properties │ └── AssemblyInfo.cs └── WordSpliter.cs ├── MisakaPatchPackager ├── AesEncrypt.cs ├── App.config ├── IEncrypter.cs ├── MisakaPatchPackager.csproj ├── NopEncrypter.cs ├── Program.cs ├── Properties │ └── AssemblyInfo.cs ├── XorEncrypt.cs └── packages.config ├── MisakaTranslator-WPF ├── AddOptWindow.xaml ├── AddOptWindow.xaml.cs ├── App.config ├── App.xaml ├── App.xaml.cs ├── Appearance.xaml ├── ArtificialTransAddWindow.xaml ├── ArtificialTransAddWindow.xaml.cs ├── ComicTranslator │ ├── ComicTransMainWindow.xaml │ ├── ComicTransMainWindow.xaml.cs │ ├── ImageProcWindow.xaml │ └── ImageProcWindow.xaml.cs ├── Common.cs ├── DictResWindow.xaml ├── DictResWindow.xaml.cs ├── GameGuideWindow.xaml ├── GameGuideWindow.xaml.cs ├── GlobalOCRWindow.xaml ├── GlobalOCRWindow.xaml.cs ├── GuidePages │ ├── ChooseLanguagePage.xaml │ ├── ChooseLanguagePage.xaml.cs │ ├── Completation.png │ ├── CompletationPage.xaml │ ├── CompletationPage.xaml.cs │ ├── Hook │ │ ├── ChooseGamePage.xaml │ │ ├── ChooseGamePage.xaml.cs │ │ ├── ChooseHookFuncPage.xaml │ │ ├── ChooseHookFuncPage.xaml.cs │ │ ├── ChooseTextRepairFuncPage.xaml │ │ ├── ChooseTextRepairFuncPage.xaml.cs │ │ ├── ReChooseHookFuncPage.xaml │ │ └── ReChooseHookFuncPage.xaml.cs │ ├── OCR │ │ ├── ChooseHandleFuncPage.xaml │ │ ├── ChooseHandleFuncPage.xaml.cs │ │ ├── ChooseHotKeyPage.xaml │ │ ├── ChooseHotKeyPage.xaml.cs │ │ ├── ChooseOCRAreaPage.xaml │ │ └── ChooseOCRAreaPage.xaml.cs │ └── PageChangeRoutedEventArgs.cs ├── IAppSettings.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── MisakaTranslator-WPF.csproj ├── Properties │ └── AssemblyInfo.cs ├── PublishATWindow.xaml ├── PublishATWindow.xaml.cs ├── RemoteATWindow.xaml ├── RemoteATWindow.xaml.cs ├── ScreenCaptureWindow.xaml ├── ScreenCaptureWindow.xaml.cs ├── SettingsPages │ ├── AboutPage.xaml │ ├── AboutPage.xaml.cs │ ├── Aboutv2.jpg │ ├── ArtificialTransSettingsPage.xaml │ ├── ArtificialTransSettingsPage.xaml.cs │ ├── DictionaryPages │ │ ├── XxgJpZhDictPage.xaml │ │ └── XxgJpZhDictPage.xaml.cs │ ├── HookSettingsPage.xaml │ ├── HookSettingsPage.xaml.cs │ ├── LESettingsPage.xaml │ ├── LESettingsPage.xaml.cs │ ├── OCRPages │ │ ├── BaiduOCRSettingsPage.xaml │ │ ├── BaiduOCRSettingsPage.xaml.cs │ │ ├── OCRGeneralSettingsPage.xaml │ │ ├── OCRGeneralSettingsPage.xaml.cs │ │ ├── TesseractOCR5SettingsPage.xaml │ │ └── TesseractOCR5SettingsPage.xaml.cs │ ├── SoftwareSettingsPage.xaml │ ├── SoftwareSettingsPage.xaml.cs │ ├── TTSSettingsPage.xaml │ ├── TTSSettingsPage.xaml.cs │ └── TranslatorPages │ │ ├── BaiduTransSettingsPage.xaml │ │ ├── BaiduTransSettingsPage.xaml.cs │ │ ├── CaiyunTransSettingsPage.xaml │ │ ├── CaiyunTransSettingsPage.xaml.cs │ │ ├── DreyeTransSettingsPage.xaml │ │ ├── DreyeTransSettingsPage.xaml.cs │ │ ├── JbeijingTransSettingsPage.xaml │ │ ├── JbeijingTransSettingsPage.xaml.cs │ │ ├── KingsoftFAITTransSettingsPage.xaml │ │ ├── KingsoftFAITTransSettingsPage.xaml.cs │ │ ├── LocalTransSettingsPage.xaml │ │ ├── LocalTransSettingsPage.xaml.cs │ │ ├── TencentFYJTransSettingsPage.xaml │ │ ├── TencentFYJTransSettingsPage.xaml.cs │ │ ├── TencentOldTransSettingsPage.xaml │ │ ├── TencentOldTransSettingsPage.xaml.cs │ │ ├── TranslatorGeneralSettingsPage.xaml │ │ ├── TranslatorGeneralSettingsPage.xaml.cs │ │ ├── XiaoniuTransSettingsPage.xaml │ │ └── XiaoniuTransSettingsPage.xaml.cs ├── SettingsWindow.xaml ├── SettingsWindow.xaml.cs ├── TransWinSettingsWindow.xaml ├── TransWinSettingsWindow.xaml.cs ├── TranslateWindow.xaml ├── TranslateWindow.xaml.cs ├── UserControls │ ├── GameNameDialog.xaml │ ├── GameNameDialog.xaml.cs │ ├── SelectTransLangDialog.xaml │ └── SelectTransLangDialog.xaml.cs ├── Utils.cs ├── app.manifest ├── lang │ ├── en-US.xaml │ └── zh-CN.xaml ├── logo.ico └── textRepairPlugins │ ├── __init__.py │ └── example.py ├── MisakaTranslator.sln ├── OCRLibrary ├── BaiduGeneralOCR.cs ├── ImageProcFunc.cs ├── OCRCommon.cs ├── OCREngine.cs ├── OCRLibrary.csproj ├── Properties │ └── AssemblyInfo.cs ├── ScreenCapture.cs ├── Tesseract5OCR.cs └── TesseractOCR.cs ├── README.md ├── README_EN.md ├── SQLHelperLibrary ├── App.config ├── GameLibraryHelper.cs ├── Properties │ └── AssemblyInfo.cs ├── SQLHelper.cs └── SQLHelperLibrary.csproj ├── THANKLIST.MD ├── TTSHelperLibrary ├── Properties │ └── AssemblyInfo.cs ├── TTSHelperLibrary.csproj └── TextSpeechHelper.cs ├── TextHookLibrary ├── ClipboardNotification.cs ├── ProcessHelper.cs ├── Properties │ └── AssemblyInfo.cs ├── RecvEventArgs.cs ├── TextHookHandle.cs ├── TextHookHandle_DLL.cs ├── TextHookLibrary.csproj └── TextHostLib.cs ├── TextRepairLibrary ├── Properties │ └── AssemblyInfo.cs ├── TextRepair.cs └── TextRepairLibrary.csproj ├── TransOptimizationLibrary ├── AfterTransHandle.cs ├── BeforeTransHandle.cs ├── NounTransOptimization.cs ├── Properties │ └── AssemblyInfo.cs └── TransOptimizationLibrary.csproj ├── TranslatorLibrary ├── AlapiTranslator.cs ├── ArtificialTranslator.cs ├── BaiduTranslator.cs ├── CaiyunTranslator.cs ├── CommonFunction.cs ├── DreyeTranslator.cs ├── GoogleCNTranslator.cs ├── ITranslator.cs ├── JBeijingTranslator.cs ├── KingsoftFastAITTranslator.cs ├── Properties │ └── AssemblyInfo.cs ├── TencentFYJTranslator.cs ├── TencentOldTranslator.cs ├── TranslatorLibrary.csproj ├── XiaoniuTranslator.cs ├── YoudaoTranslator.cs └── app.config ├── background.png └── index.html /.github/ISSUE_TEMPLATE/Bug_Report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug Report 3 | about: Bug 反馈 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | **关于哪一项功能** 17 | 18 | 19 | **问题描述** 20 | 21 | 22 | 23 | **应用版本** 24 | 25 | 26 | 27 | **系统信息** 28 | 29 | 30 | 31 | **错误信息** 32 | 33 | 34 | 35 | 36 | **附加截图** 37 | 38 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Feature_Request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request 3 | about: 功能建议 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **关于哪一项功能** 11 | 12 | 13 | 14 | **期望的效果** 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/TODO.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: TODO 3 | about: 待办事项 4 | title: '' 5 | labels: todo 6 | assignees: '' 7 | 8 | --- 9 | 10 | **要实现的功能** 11 | 12 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: push 3 | 4 | jobs: 5 | build: 6 | runs-on: windows-latest 7 | steps: 8 | - uses: actions/checkout@v2 9 | - uses: microsoft/setup-msbuild@v1 10 | - run: msbuild -v:m -r 11 | -------------------------------------------------------------------------------- /About.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsc6924/MisakaPatcher/aed7035179a799608a350c5ec3bfc75c56015a12/About.jpg -------------------------------------------------------------------------------- /AliyunRequestHandler/.gitignore: -------------------------------------------------------------------------------- 1 | api-token 2 | node_modules/ -------------------------------------------------------------------------------- /AliyunRequestHandler/index.js: -------------------------------------------------------------------------------- 1 | var getRawBody = require('raw-body'); 2 | var getFormBody = require('body/form'); 3 | var body = require('body'); 4 | var axios = require('axios'); 5 | var fs = require('fs'); 6 | 7 | 8 | /* 9 | To enable the initializer feature (https://help.aliyun.com/document_detail/156876.html) 10 | please implement the initializer function as below: 11 | exports.initializer = (context, callback) => { 12 | console.log('initializing'); 13 | callback(null, ''); 14 | }; 15 | */ 16 | 17 | exports.handler = (req, resp, context) => { 18 | var api_token = fs.readFileSync('api-token', 'utf8').trim(); 19 | 20 | var params = { 21 | path: req.path, 22 | queries: req.queries, 23 | headers: req.headers, 24 | method : req.method, 25 | requestURI : req.url, 26 | clientIP : req.clientIP, 27 | } 28 | 29 | getRawBody(req, async function(err, body) { 30 | for (var key in req.queries) { 31 | var value = req.queries[key]; 32 | resp.setHeader(key, value); 33 | } 34 | try { 35 | const strBody = body; 36 | body = JSON.parse(body); 37 | console.log(body); 38 | const owner = "jsc723"; 39 | const repo = "misaka-patches-headers"; 40 | const fileName = `${body['game']}|${body['author']}|${body['md5']}` 41 | const path = `headers/${fileName}`; 42 | const content = Buffer.from(strBody, 'utf-8').toString('base64'); 43 | 44 | const result = await axios.post(`https://gitee.com/api/v5/repos/${owner}/${repo}/contents/${path}`, { 45 | access_token: api_token, 46 | content: content, 47 | message: 'create patch for' + body['game'] 48 | }); 49 | console.log(result.data); 50 | resp.send("success"); 51 | } catch (error) { 52 | if (error.response) { 53 | // The request was made and the server responded with a status code 54 | // that falls out of the range of 2xx 55 | console.log(error.response.data); 56 | console.log(error.response.status); 57 | console.log(error.response.headers); 58 | resp.send("error: " + error.response.data.message); 59 | } else if (error.request) { 60 | // The request was made but no response was received 61 | // `error.request` is an instance of XMLHttpRequest in the browser and an instance of 62 | // http.ClientRequest in node.js 63 | console.log(error.request); 64 | resp.send("error: " + error.request); 65 | } else { 66 | // Something happened in setting up the request that triggered an Error 67 | console.log('Error', error.message); 68 | resp.send("error: " + error.message); 69 | } 70 | } 71 | }); 72 | 73 | /* 74 | getFormBody(req, function(err, formBody) { 75 | for (var key in req.queries) { 76 | var value = req.queries[key]; 77 | resp.setHeader(key, value); 78 | } 79 | params.body = formBody; 80 | console.log(formBody); 81 | resp.send(JSON.stringify(params)); 82 | }); 83 | */ 84 | } -------------------------------------------------------------------------------- /AliyunRequestHandler/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ServerlessRequestHandler", 3 | "lockfileVersion": 2, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "axios": "^0.21.1" 9 | } 10 | }, 11 | "node_modules/axios": { 12 | "version": "0.21.1", 13 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", 14 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", 15 | "dependencies": { 16 | "follow-redirects": "^1.10.0" 17 | } 18 | }, 19 | "node_modules/follow-redirects": { 20 | "version": "1.13.3", 21 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", 22 | "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", 23 | "funding": [ 24 | { 25 | "type": "individual", 26 | "url": "https://github.com/sponsors/RubenVerborgh" 27 | } 28 | ], 29 | "engines": { 30 | "node": ">=4.0" 31 | }, 32 | "peerDependenciesMeta": { 33 | "debug": { 34 | "optional": true 35 | } 36 | } 37 | } 38 | }, 39 | "dependencies": { 40 | "axios": { 41 | "version": "0.21.1", 42 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", 43 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", 44 | "requires": { 45 | "follow-redirects": "^1.10.0" 46 | } 47 | }, 48 | "follow-redirects": { 49 | "version": "1.13.3", 50 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", 51 | "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==" 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /AliyunRequestHandler/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "axios": "^0.21.1" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /AliyunRequestHandler/test.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | var fs = require('fs'); 3 | async function f1() { 4 | const owner = "jsc723"; 5 | const repo = "misaka-patches-headers"; 6 | const path = "headers/test3"; 7 | const plain = "你好"; 8 | const api_token = fs.readFileSync('api-token', 'utf8').trim(); 9 | const buffer = Buffer.from(plain, 'utf-8').toString('base64'); 10 | 11 | try { 12 | var result = await axios.post(`https://gitee.com/api/v5/repos/${owner}/${repo}/contents/${path}`, { 13 | access_token: api_token, 14 | content: buffer, 15 | message: 'test' 16 | }); 17 | console.log(result.status); 18 | console.log(result.data); 19 | } catch (error) { 20 | if (error.response) { 21 | // The request was made and the server responded with a status code 22 | // that falls out of the range of 2xx 23 | console.log(error.response.data); 24 | console.log(error.response.status); 25 | console.log(error.response.headers); 26 | } else if (error.request) { 27 | // The request was made but no response was received 28 | // `error.request` is an instance of XMLHttpRequest in the browser and an instance of 29 | // http.ClientRequest in node.js 30 | console.log(error.request); 31 | } else { 32 | // Something happened in setting up the request that triggered an Error 33 | console.log('Error', error.message); 34 | } 35 | console.log(error.config); 36 | } 37 | return result; 38 | } 39 | 40 | var a = f1(); 41 | -------------------------------------------------------------------------------- /ArtificialTransHelperLibrary/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("ArtificialTransHelperLibrary")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("ArtificialTransHelperLibrary")] 13 | [assembly: AssemblyCopyright("Copyright © 2020")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // 将 ComVisible 设置为 false 会使此程序集中的类型 18 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 19 | //请将此类型的 ComVisible 特性设置为 true。 20 | [assembly: ComVisible(false)] 21 | 22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 23 | [assembly: Guid("a6568552-a4d0-4546-ace5-d8a710ee7e0e")] 24 | 25 | // 程序集的版本信息由下列四个值组成: 26 | // 27 | // 主版本 28 | // 次版本 29 | // 生成号 30 | // 修订号 31 | // 32 | // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 33 | //通过使用 "*",如下所示: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # 我该如何为这个项目作出贡献? 2 | 3 | ## 反馈BUG 4 | 5 | 请[新建Issue](https://github.com/hanmin0822/MisakaTranslator/issues/new/choose),并选择Bug Report模板,按照模板中的说明反馈BUG。 6 | 7 | ## 功能建议 8 | 9 | 请[新建Issue](https://github.com/hanmin0822/MisakaTranslator/issues/new/choose),并选择Feature Request模板,按照模板中的说明提交功能建议。 10 | 11 | ## 贡献代码 12 | 13 | 您可以直接Fork本项目,并且进行修改和编译,建议使用Visual Studio。 14 | 15 | 在修改时请注意,2.0beta3之前的版本运行时需要调用Textractor的CLI版本读输出,但原版的控制台输出可能导致本软件无法读取或读取存在问题,针对CLI版本的修改如下,请自行编译后使用。 16 | 17 | * [hanmin0822/Textractor](https://github.com/hanmin0822/Textractor) 18 | 19 | ### 代码规范 20 | 21 | 本项目代码质量并不高,代码风格也不要求统一,但请尽量追求清晰易读。 22 | 23 | 编码规范可以参考[C#编码规范](https://gist.github.com/zhuqling/a2700703d088b8746f0c) 24 | 25 | ### 提交Pull Requset 26 | 27 | 本项目不要求特定的PR格式,在正文中写清楚所做的更改即可。 28 | -------------------------------------------------------------------------------- /DictionaryHelperLibrary/IDict.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace DictionaryHelperLibrary 8 | { 9 | public interface IDict 10 | { 11 | /// 12 | /// 字典API初始化 13 | /// 14 | /// 参数一 一般是appID或者路径(为路径时参数二无效) 15 | /// 参数二 一般是密钥 16 | void DictInit(string param1, string param2); 17 | 18 | /// 19 | /// 查询一次辞典 20 | /// 21 | /// 源单词 22 | /// 查询结果,如果查询有错误会返回空,可以通过GetLastError来获取错误 23 | string SearchInDict(string sourceWord); 24 | 25 | /// 26 | /// 返回最后一次错误的ID或原因 27 | /// 28 | /// 29 | string GetLastError(); 30 | 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /DictionaryHelperLibrary/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("DictionaryHelperLibrary")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("DictionaryHelperLibrary")] 13 | [assembly: AssemblyCopyright("Copyright © 2020")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // 将 ComVisible 设置为 false 会使此程序集中的类型 18 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 19 | //请将此类型的 ComVisible 特性设置为 true。 20 | [assembly: ComVisible(false)] 21 | 22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 23 | [assembly: Guid("ebe31abb-efb0-4a46-a8e0-655f614f88d9")] 24 | 25 | // 程序集的版本信息由下列四个值组成: 26 | // 27 | // 主版本 28 | // 次版本 29 | // 生成号 30 | // 修订号 31 | // 32 | // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 33 | //通过使用 "*",如下所示: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /DictionaryHelperLibrary/XxgJpzhDict.cs: -------------------------------------------------------------------------------- 1 | using SQLHelperLibrary; 2 | using System; 3 | using System.Linq; 4 | using System.Text.RegularExpressions; 5 | 6 | namespace DictionaryHelperLibrary 7 | { 8 | /// 9 | /// 小学馆日中词典 10 | /// 11 | public class XxgJpzhDict : IDict 12 | { 13 | private SQLHelper _sqlHelper; 14 | private string _errorInfo; 15 | 16 | public string GetLastError() 17 | { 18 | return _errorInfo; 19 | } 20 | 21 | public string SearchInDict(string sourceWord) 22 | { 23 | var lst = _sqlHelper.ExecuteReader($"SELECT explanation FROM xiaoxueguanrizhong WHERE word LIKE '%{sourceWord}%';", 1); 24 | 25 | if (lst != null) return lst.Aggregate(string.Empty, (current, t) => current + t[0] + "\n"); 26 | _errorInfo = "DB Error:" + _sqlHelper.GetLastError(); 27 | return null; 28 | 29 | } 30 | 31 | public void DictInit(string param1, string param2) 32 | { 33 | _sqlHelper = new SQLHelper(param1); 34 | } 35 | 36 | /// 37 | /// 去掉HTML标记,改为换行 38 | /// 39 | /// 40 | /// 41 | public static string RemoveHTML(string src) 42 | { 43 | if (src == null) 44 | { 45 | return null; 46 | } 47 | 48 | var tmp = Regex.Replace(src, "<[^>]+>", string.Empty); 49 | tmp = Regex.Replace(tmp, "&[^;]+;", string.Empty); 50 | 51 | var arr = tmp.Split(new[] { "\\n" }, StringSplitOptions.None); 52 | 53 | return arr.Aggregate(string.Empty, (current, s) => current + s + "\n"); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /KeyboardMouseHookLibrary/FindWindowInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.InteropServices; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace KeyboardMouseHookLibrary 9 | { 10 | public class FindWindowInfo 11 | { 12 | [DllImport("user32.dll", EntryPoint = "WindowFromPoint")]//指定坐标处窗体句柄 13 | public static extern int WindowFromPoint( 14 | int xPoint, 15 | int yPoint 16 | ); 17 | 18 | [DllImport("user32.dll", EntryPoint = "GetWindowText")] 19 | public static extern int GetWindowText( 20 | int hWnd, 21 | StringBuilder lpString, 22 | int nMaxCount 23 | ); 24 | 25 | [DllImport("user32.dll", EntryPoint = "GetClassName")] 26 | public static extern int GetClassName( 27 | int hWnd, 28 | StringBuilder lpString, 29 | int nMaxCont 30 | ); 31 | 32 | [DllImport("User32.dll", CharSet = CharSet.Auto)] 33 | public static extern int GetWindowThreadProcessId( 34 | IntPtr hwnd, 35 | out int ID 36 | ); 37 | 38 | /// 39 | /// 获取指定坐标处窗口的句柄 40 | /// 41 | /// 42 | /// 43 | /// 44 | public static int GetWindowHWND(int mouseX, int mouseY) 45 | { 46 | 47 | int hwnd = WindowFromPoint(mouseX, mouseY); 48 | return hwnd; 49 | } 50 | 51 | /// 52 | /// 根据HWND获得窗口标题 53 | /// 54 | /// 55 | /// 56 | public static string GetWindowName(int hwnd) 57 | { 58 | StringBuilder name = new StringBuilder(256); 59 | GetWindowText(hwnd, name, 256); 60 | return name.ToString(); 61 | } 62 | 63 | /// 64 | /// 根据HWND获得类名 65 | /// 66 | /// 67 | /// 68 | public static string GetWindowClassName(int hwnd) 69 | { 70 | StringBuilder name = new StringBuilder(256); 71 | GetClassName(hwnd, name, 256); 72 | return name.ToString(); 73 | } 74 | 75 | /// 76 | /// 根据HWND获得进程ID 77 | /// 78 | /// 79 | /// 80 | public static int GetProcessIDByHWND(int hwnd) 81 | { 82 | int oo; 83 | IntPtr ip = new IntPtr(hwnd); 84 | GetWindowThreadProcessId(ip, out oo); 85 | return oo; 86 | } 87 | 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /KeyboardMouseHookLibrary/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("KeyboardMouseHookLibrary")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("KeyboardMouseHookLibrary")] 13 | [assembly: AssemblyCopyright("Copyright © 2020")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // 将 ComVisible 设置为 false 会使此程序集中的类型 18 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 19 | //请将此类型的 ComVisible 特性设置为 true。 20 | [assembly: ComVisible(false)] 21 | 22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 23 | [assembly: Guid("1ae9ea11-9fa0-4d30-b16e-ecf7183dec7a")] 24 | 25 | // 程序集的版本信息由下列四个值组成: 26 | // 27 | // 主版本 28 | // 次版本 29 | // 生成号 30 | // 修订号 31 | // 32 | // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 33 | //通过使用 "*",如下所示: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /KeyboardMouseMonitor/KeyboardMouseMonitor.cpp: -------------------------------------------------------------------------------- 1 | /************************************************* 2 | * 由于.NET下使用全局键盘鼠标钩子总是会出现回调事件 3 | * 没有反应的情况,故使用C++单写一个进程,C#中调用 4 | * 这个EXE并进行通信,获取键鼠钩子事件。 5 | * 启动传参为: 钩子类型(1=鼠标 2=键盘) 指定键值(见代码) 6 | * 当指定键动作时输出一行返回值 7 | * 使用时将这个项目单独编译,生成的EXE文件放入lib中即可 8 | *************************************************/ 9 | 10 | #include "pch.h" 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | using namespace std; 18 | 19 | int keyCode; 20 | 21 | LRESULT CALLBACK mymouse(int nCode, WPARAM wParam, LPARAM lParam) 22 | { 23 | MOUSEHOOKSTRUCT *mhookstruct = (MOUSEHOOKSTRUCT*)lParam; 24 | POINT pt = mhookstruct->pt; 25 | 26 | if (keyCode == 1) { 27 | if (wParam == WM_LBUTTONUP) { 28 | cout << "MouseAction " << pt.x << " " << pt.y << endl; 29 | } 30 | } 31 | else if (keyCode == 2) { 32 | if (wParam == WM_RBUTTONUP) { 33 | cout << "MouseAction " << pt.x << " " << pt.y << endl; 34 | } 35 | } 36 | 37 | return CallNextHookEx(NULL, nCode, wParam, lParam); 38 | } 39 | 40 | LRESULT CALLBACK mykeyboard(int nCode, WPARAM wParam, LPARAM lParam) 41 | { 42 | PKBDLLHOOKSTRUCT pKeyboardHookStruct = (PKBDLLHOOKSTRUCT)lParam; 43 | 44 | if (wParam == WM_KEYUP) { 45 | if (pKeyboardHookStruct->vkCode == keyCode) { 46 | cout << "KeyboardAction" << endl; 47 | } 48 | } 49 | 50 | return CallNextHookEx(NULL, nCode, wParam, lParam); 51 | } 52 | 53 | 54 | int main(int argc, char* argv[]) 55 | { 56 | 57 | if (argc != 3) { 58 | return -1; 59 | } 60 | 61 | HHOOK hook = 0; 62 | int actID = atoi(argv[1]); 63 | keyCode = atoi(argv[2]); 64 | if (actID == 1) { 65 | //鼠标 keyCode=1代表左键 keyCode=2代表右键 66 | hook = SetWindowsHookEx(WH_MOUSE_LL, mymouse, 0, 0); 67 | } 68 | else if (actID == 2) { 69 | //键盘 keyCode代表对应键的ASCII码 70 | hook = SetWindowsHookEx(WH_KEYBOARD_LL, mykeyboard, 0, 0); 71 | } 72 | 73 | if (hook == NULL) { 74 | cout << "hookFailed" << endl; 75 | } 76 | 77 | MSG msg; 78 | while (GetMessage(&msg, NULL, NULL, NULL)) 79 | { 80 | } 81 | UnhookWindowsHookEx(hook); 82 | return 0; 83 | } 84 | 85 | -------------------------------------------------------------------------------- /KeyboardMouseMonitor/KeyboardMouseMonitor.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;ipp;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 头文件 20 | 21 | 22 | 23 | 24 | 源文件 25 | 26 | 27 | 源文件 28 | 29 | 30 | -------------------------------------------------------------------------------- /KeyboardMouseMonitor/pch.cpp: -------------------------------------------------------------------------------- 1 | // pch.cpp: 与预编译标头对应的源文件;编译成功所必需的 2 | 3 | #include "pch.h" 4 | 5 | // 一般情况下,忽略此文件,但如果你使用的是预编译标头,请保留它。 6 | -------------------------------------------------------------------------------- /KeyboardMouseMonitor/pch.h: -------------------------------------------------------------------------------- 1 | // 入门提示: 2 | // 1. 使用解决方案资源管理器窗口添加/管理文件 3 | // 2. 使用团队资源管理器窗口连接到源代码管理 4 | // 3. 使用输出窗口查看生成输出和其他消息 5 | // 4. 使用错误列表窗口查看错误 6 | // 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目 7 | // 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件 8 | 9 | #ifndef PCH_H 10 | #define PCH_H 11 | 12 | // TODO: 添加要在此处预编译的标头 13 | 14 | #endif //PCH_H 15 | -------------------------------------------------------------------------------- /MecabHelperLibrary/MecabHelper.cs: -------------------------------------------------------------------------------- 1 | using MeCab; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace MecabHelperLibrary 9 | { 10 | public class MecabHelper : WordSpliter 11 | { 12 | private MeCabParam Parameter; 13 | private MeCabTagger Tagger; 14 | 15 | public MecabHelper() { 16 | Parameter = new MeCabParam(); 17 | Tagger = MeCabTagger.Create(Parameter); 18 | } 19 | 20 | public void Dispose() 21 | { 22 | Tagger.Dispose(); 23 | } 24 | 25 | /// 26 | /// 处理句子,对句子进行分词,得到结果 27 | /// 28 | /// 29 | /// 30 | public List SentenceHandle(string sentence) { 31 | 32 | List ret = new List(); 33 | 34 | foreach (var node in Tagger.ParseToNodes(sentence)) 35 | { 36 | if (node.CharType > 0) 37 | { 38 | var features = node.Feature.Split(','); 39 | 40 | WordInfo mwi = new WordInfo { 41 | Word = node.Surface, 42 | PartOfSpeech = features[0], 43 | Description = features[1], 44 | Feature = node.Feature 45 | }; 46 | 47 | //加这一步是为了防止乱码进入分词导致无法读取假名 48 | if (features.Length >= 8) 49 | { 50 | mwi.Kana = features[7]; 51 | } 52 | 53 | ret.Add(mwi); 54 | } 55 | } 56 | 57 | return ret; 58 | } 59 | 60 | 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /MecabHelperLibrary/NoWordSplit.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace MecabHelperLibrary 8 | { 9 | 10 | public class NoWordSplit : WordSpliter 11 | { 12 | public List SentenceHandle(string sentence) 13 | { 14 | List ret = new List(1); 15 | WordInfo info = new WordInfo(); 16 | info.Word = sentence; 17 | ret.Add(info); 18 | return ret; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /MecabHelperLibrary/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("MecabHelperLibrary")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("MecabHelperLibrary")] 13 | [assembly: AssemblyCopyright("Copyright © 2020")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // 将 ComVisible 设置为 false 会使此程序集中的类型 18 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 19 | //请将此类型的 ComVisible 特性设置为 true。 20 | [assembly: ComVisible(false)] 21 | 22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 23 | [assembly: Guid("82fde770-321e-4433-8e05-8803850f24db")] 24 | 25 | // 程序集的版本信息由下列四个值组成: 26 | // 27 | // 主版本 28 | // 次版本 29 | // 生成号 30 | // 修订号 31 | // 32 | // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 33 | //通过使用 "*",如下所示: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /MecabHelperLibrary/WordSpliter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace MecabHelperLibrary 8 | { 9 | public interface WordSpliter 10 | { 11 | List SentenceHandle(string sentence); 12 | } 13 | 14 | public struct WordInfo 15 | { 16 | 17 | /// 18 | /// 单词 19 | /// 20 | public string Word; 21 | 22 | /// 23 | /// 词性 24 | /// 25 | public string PartOfSpeech; 26 | 27 | /// 28 | /// 词性说明 29 | /// 30 | public string Description; 31 | 32 | /// 33 | /// 假名 34 | /// 35 | public string Kana; 36 | 37 | /// 38 | /// Mecab能提供的关于这个词的详细信息 CSV表示 39 | /// 40 | public string Feature; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /MisakaPatchPackager/AesEncrypt.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Text; 4 | using System.Security.Cryptography; 5 | 6 | namespace MisakaPatchPackager 7 | { 8 | class AesEncrypt : IEncrypter 9 | { 10 | static byte[] iv = new byte[] { 6, 3, 2, 4, 4, 7, 2, 9, 0, 1, 0, 3, 6, 6, 8, 2 }; 11 | static string Key = "7y41ca4o)pa2ea233bU^[0q4315a*+16"; 12 | static Aes aes; 13 | static AesEncrypt() 14 | { 15 | aes = Aes.Create(); 16 | aes.IV = iv; 17 | aes.Key = Encoding.UTF8.GetBytes(Key); 18 | } 19 | public string EncryptString(string plainText) 20 | { 21 | byte[] array; 22 | 23 | ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV); 24 | 25 | using (MemoryStream memoryStream = new MemoryStream()) 26 | { 27 | using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) 28 | { 29 | using (StreamWriter streamWriter = new StreamWriter(cryptoStream)) 30 | { 31 | streamWriter.Write(plainText); 32 | } 33 | 34 | array = memoryStream.ToArray(); 35 | } 36 | } 37 | 38 | return Convert.ToBase64String(array); 39 | } 40 | 41 | public string DecryptString(string cipherText) 42 | { 43 | byte[] buffer = Convert.FromBase64String(cipherText); 44 | 45 | ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV); 46 | 47 | using (MemoryStream memoryStream = new MemoryStream(buffer)) 48 | { 49 | using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read)) 50 | { 51 | using (StreamReader streamReader = new StreamReader(cryptoStream)) 52 | { 53 | return streamReader.ReadToEnd(); 54 | } 55 | } 56 | } 57 | } 58 | } 59 | } -------------------------------------------------------------------------------- /MisakaPatchPackager/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MisakaPatchPackager/IEncrypter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace MisakaPatchPackager 8 | { 9 | public interface IEncrypter 10 | { 11 | string EncryptString(string plainText); 12 | string DecryptString(string cipherText); 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /MisakaPatchPackager/NopEncrypter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace MisakaPatchPackager 8 | { 9 | class NopEncrypter: IEncrypter 10 | { 11 | public string EncryptString(string plainText) 12 | { 13 | return plainText; 14 | } 15 | public string DecryptString(string cipherText) 16 | { 17 | return cipherText; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /MisakaPatchPackager/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("MisakaPatchPackager")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("MisakaPatchPackager")] 13 | [assembly: AssemblyCopyright("Copyright © 2021")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // 将 ComVisible 设置为 false 会使此程序集中的类型 18 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 19 | //请将此类型的 ComVisible 特性设置为 true。 20 | [assembly: ComVisible(false)] 21 | 22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 23 | [assembly: Guid("38796814-f08e-4468-a3de-dcdb876b326a")] 24 | 25 | // 程序集的版本信息由下列四个值组成: 26 | // 27 | // 主版本 28 | // 次版本 29 | // 生成号 30 | // 修订号 31 | // 32 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 33 | //通过使用 "*",如下所示: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /MisakaPatchPackager/XorEncrypt.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.IO; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Diagnostics; 8 | using System.Globalization; 9 | 10 | namespace MisakaPatchPackager 11 | { 12 | class XorEncrypt : IEncrypter 13 | { 14 | static byte[] key = new byte[] { 0x26, 0x3f, 0xa5, 0xbb, 0x4c, 0xf7, 0x9c, 0x19 }; 15 | public string EncryptString(string plainText) 16 | { 17 | byte[] array; 18 | 19 | using (MemoryStream memoryStream = new MemoryStream()) 20 | { 21 | using (StreamWriter streamWriter = new StreamWriter(memoryStream)) 22 | { 23 | streamWriter.Write(plainText); 24 | } 25 | array = memoryStream.ToArray(); 26 | Xor(array); 27 | } 28 | return Convert.ToBase64String(array); 29 | } 30 | 31 | public string DecryptString(string cipherText) 32 | { 33 | byte[] buffer = Convert.FromBase64String(cipherText); 34 | Xor(buffer); 35 | using (MemoryStream memoryStream = new MemoryStream(buffer)) 36 | { 37 | using (StreamReader streamReader = new StreamReader(memoryStream)) 38 | { 39 | return streamReader.ReadToEnd(); 40 | } 41 | } 42 | } 43 | 44 | private static void Xor(byte[] array) 45 | { 46 | int i = 3; 47 | for(int j = 0; j < array.Length; j++) 48 | { 49 | array[j] ^= key[i]; 50 | i = (i + 1) % key.Length; 51 | } 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /MisakaPatchPackager/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/AddOptWindow.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/DictResWindow.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/DictResWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using DictionaryHelperLibrary; 2 | using HandyControl.Controls; 3 | using MecabHelperLibrary; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows; 10 | using System.Windows.Controls; 11 | using System.Windows.Data; 12 | using System.Windows.Documents; 13 | using System.Windows.Input; 14 | using System.Windows.Media; 15 | using System.Windows.Media.Imaging; 16 | using System.Windows.Shapes; 17 | using TTSHelperLibrary; 18 | 19 | namespace MisakaTranslator_WPF 20 | { 21 | /// 22 | /// DictResWindow.xaml 的交互逻辑 23 | /// 24 | public partial class DictResWindow : System.Windows.Window 25 | { 26 | private string sourceWord; 27 | private TextSpeechHelper _textSpeechHelper; 28 | private IDict _dict; 29 | 30 | public DictResWindow(string word,string kana = "----", TextSpeechHelper tsh = null) 31 | { 32 | sourceWord = word; 33 | InitializeComponent(); 34 | if (tsh == null) 35 | { 36 | _textSpeechHelper = new TextSpeechHelper(); 37 | } 38 | else { 39 | _textSpeechHelper = tsh; 40 | } 41 | 42 | 43 | if (Common.appSettings.ttsVoice == "") 44 | { 45 | Growl.InfoGlobal(Application.Current.Resources["TranslateWin_NoTTS_Hint"].ToString()); 46 | } 47 | else 48 | { 49 | _textSpeechHelper.SetTTSVoice(Common.appSettings.ttsVoice); 50 | _textSpeechHelper.SetVolume(Common.appSettings.ttsVolume); 51 | _textSpeechHelper.SetRate(Common.appSettings.ttsRate); 52 | } 53 | 54 | if (Common.appSettings.xxgPath != string.Empty) 55 | { 56 | _dict = new XxgJpzhDict(); 57 | _dict.DictInit(Common.appSettings.xxgPath, string.Empty); 58 | } 59 | 60 | string ret = _dict.SearchInDict(sourceWord); 61 | 62 | SourceWord.Text = sourceWord; 63 | 64 | Kana.Text = kana; 65 | 66 | this.Topmost = true; 67 | DicResText.Text = XxgJpzhDict.RemoveHTML(ret); 68 | } 69 | 70 | ~DictResWindow() { 71 | _textSpeechHelper = null; 72 | _dict = null; 73 | } 74 | 75 | private void TTS_Btn_Click(object sender, RoutedEventArgs e) 76 | { 77 | _textSpeechHelper.SpeakAsync(sourceWord); 78 | } 79 | 80 | private void Search_Btn_Click(object sender, RoutedEventArgs e) 81 | { 82 | System.Diagnostics.Process.Start("https://www.baidu.com/s?wd=" + sourceWord); 83 | } 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/GameGuideWindow.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/GlobalOCRWindow.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/GuidePages/ChooseLanguagePage.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 25 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/GuidePages/Completation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsc6924/MisakaPatcher/aed7035179a799608a350c5ec3bfc75c56015a12/MisakaTranslator-WPF/GuidePages/Completation.png -------------------------------------------------------------------------------- /MisakaTranslator-WPF/GuidePages/CompletationPage.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/GuidePages/PageChangeRoutedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | 9 | namespace MisakaTranslator_WPF.GuidePages 10 | { 11 | public class PageChangeRoutedEventArgs : RoutedEventArgs 12 | { 13 | public PageChangeRoutedEventArgs(RoutedEvent routedEvent, object source) : base(routedEvent, source) { } 14 | 15 | /// 16 | /// 下一页的XAML地址 17 | /// 18 | public string XamlPath { get; set; } 19 | 20 | /// 21 | /// 部分方法需要用到的额外参数 22 | /// 23 | public object ExtraArgs; 24 | } 25 | 26 | public class PageChange 27 | { 28 | public string XamlPath; 29 | 30 | //声明和注册路由事件 31 | public static readonly RoutedEvent PageChangeRoutedEvent = 32 | EventManager.RegisterRoutedEvent("PageChange", RoutingStrategy.Bubble, typeof(EventHandler), typeof(PageChange)); 33 | 34 | } 35 | 36 | 37 | } 38 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | using System.Windows; 4 | 5 | [assembly : AssemblyTitle("MisakaTranslator_WPF")] 6 | [assembly : AssemblyDescription("")] 7 | [assembly : AssemblyConfiguration("")] 8 | [assembly : AssemblyCompany("")] 9 | [assembly : AssemblyProduct("MisakaTranslator_WPF")] 10 | [assembly : AssemblyCopyright("Copyright © MisakaTranslator")] 11 | [assembly : AssemblyTrademark("")] 12 | [assembly : AssemblyCulture("")] 13 | [assembly : ComVisible(false)] 14 | [assembly : ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)] 15 | [assembly : AssemblyVersion("2.7.0.0")] 16 | [assembly : AssemblyFileVersion("2.7.0.0")] -------------------------------------------------------------------------------- /MisakaTranslator-WPF/ScreenCaptureWindow.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 14 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/AboutPage.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/DictionaryPages/XxgJpZhDictPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | using DictionaryHelperLibrary; 16 | 17 | namespace MisakaTranslator_WPF.SettingsPages.DictionaryPages 18 | { 19 | /// 20 | /// XxgJpZhDictPage.xaml 的交互逻辑 21 | /// 22 | public partial class XxgJpZhDictPage : Page 23 | { 24 | public XxgJpZhDictPage() 25 | { 26 | InitializeComponent(); 27 | PathBox.Text = Common.appSettings.xxgPath; 28 | } 29 | 30 | private void ChoosePathBtn_Click(object sender, RoutedEventArgs e) 31 | { 32 | 33 | System.Windows.Forms.OpenFileDialog dialog = new System.Windows.Forms.OpenFileDialog 34 | { 35 | Multiselect = false, 36 | Title = Application.Current.Resources["XxgJpZhDictPage_ChoosePathHint"].ToString(), 37 | Filter = "所有文件(*.*)|*.*" 38 | }; 39 | if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) 40 | { 41 | if (string.IsNullOrEmpty(dialog.FileName)) 42 | { 43 | HandyControl.Controls.Growl.Error(Application.Current.Resources["FilePath_Null_Hint"].ToString()); 44 | } 45 | else 46 | { 47 | PathBox.Text = dialog.FileName; 48 | Common.appSettings.xxgPath = PathBox.Text; 49 | } 50 | } 51 | } 52 | 53 | private void TestBtn_Click(object sender, RoutedEventArgs e) 54 | { 55 | IDict dict = new XxgJpzhDict(); 56 | 57 | dict.DictInit(Common.appSettings.xxgPath, ""); 58 | 59 | string ret = dict.SearchInDict(TestSrcText.Text); 60 | if (ret != null) 61 | { 62 | DictResWindow dictResWindow = new DictResWindow(TestSrcText.Text); 63 | dictResWindow.Show(); 64 | } 65 | else 66 | { 67 | HandyControl.Controls.Growl.Error($"查询错误!{dict.GetLastError()}"); 68 | } 69 | 70 | } 71 | } 72 | } -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/HookSettingsPage.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/LESettingsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | 16 | namespace MisakaTranslator_WPF.SettingsPages 17 | { 18 | /// 19 | /// LESettingsPage.xaml 的交互逻辑 20 | /// 21 | public partial class LESettingsPage : Page 22 | { 23 | public LESettingsPage() 24 | { 25 | InitializeComponent(); 26 | 27 | PathBox.Text = Common.appSettings.LEPath; 28 | } 29 | 30 | private void ChoosePathBtn_Click(object sender, RoutedEventArgs e) 31 | { 32 | System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog 33 | { 34 | Description = Application.Current.Resources["LESettingsPage_ChooseFilePathHint"].ToString() 35 | }; 36 | if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) 37 | { 38 | if (string.IsNullOrEmpty(dialog.SelectedPath)) 39 | { 40 | HandyControl.Controls.Growl.Error(Application.Current.Resources["FilePath_Null_Hint"].ToString()); 41 | } 42 | else 43 | { 44 | PathBox.Text = dialog.SelectedPath; 45 | Common.appSettings.LEPath = PathBox.Text; 46 | } 47 | } 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/OCRPages/BaiduOCRSettingsPage.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TTSSettingsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | using TTSHelperLibrary; 16 | 17 | namespace MisakaTranslator_WPF.SettingsPages 18 | { 19 | /// 20 | /// TTSSettingsPage.xaml 的交互逻辑 21 | /// 22 | public partial class TTSSettingsPage : Page 23 | { 24 | TextSpeechHelper tsh; 25 | 26 | public TTSSettingsPage() 27 | { 28 | tsh = new TextSpeechHelper(); 29 | InitializeComponent(); 30 | 31 | List lst = tsh.GetAllTTSEngine(); 32 | TTSSourceCombox.ItemsSource = lst; 33 | 34 | for (int i = 0; i < lst.Count; i++) 35 | { 36 | if (lst[i] == Common.appSettings.ttsVoice) 37 | { 38 | TTSSourceCombox.SelectedIndex = i; 39 | break; 40 | } 41 | } 42 | VolumeBar.Value = Common.appSettings.ttsVolume; 43 | RateBar.Value = Common.appSettings.ttsRate; 44 | } 45 | 46 | private void TTSSourceCombox_SelectionChanged(object sender, SelectionChangedEventArgs e) 47 | { 48 | tsh.SetTTSVoice((string) TTSSourceCombox.SelectedValue); 49 | } 50 | 51 | private void TestBtn_Click(object sender, RoutedEventArgs e) 52 | { 53 | tsh.SpeakAsync(TestSrcText.Text); 54 | Common.appSettings.ttsVoice = (string) TTSSourceCombox.SelectedValue; 55 | Common.appSettings.ttsVolume = (int) VolumeBar.Value; 56 | Common.appSettings.ttsRate = (int) RateBar.Value; 57 | } 58 | 59 | private void VolumeBar_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) 60 | { 61 | tsh.SetVolume((int) VolumeBar.Value); 62 | } 63 | 64 | private void RateBar_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) 65 | { 66 | tsh.SetRate((int) RateBar.Value); 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/BaiduTransSettingsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | using TranslatorLibrary; 16 | 17 | namespace MisakaTranslator_WPF.SettingsPages.TranslatorPages 18 | { 19 | /// 20 | /// BaiduTransSettingsPage.xaml 的交互逻辑 21 | /// 22 | public partial class BaiduTransSettingsPage : Page 23 | { 24 | public BaiduTransSettingsPage() 25 | { 26 | InitializeComponent(); 27 | BDTransAppIDBox.Text = Common.appSettings.BDappID; 28 | BDTransSecretKeyBox.Text = Common.appSettings.BDsecretKey; 29 | } 30 | 31 | private void AuthTestBtn_Click(object sender, RoutedEventArgs e) 32 | { 33 | Common.appSettings.BDappID = BDTransAppIDBox.Text; 34 | Common.appSettings.BDsecretKey = BDTransSecretKeyBox.Text; 35 | ITranslator BDTrans = new BaiduTranslator(); 36 | BDTrans.TranslatorInit(BDTransAppIDBox.Text, BDTransSecretKeyBox.Text); 37 | 38 | if (BDTrans.Translate("apple", "zh", "en") != null) 39 | { 40 | HandyControl.Controls.Growl.Success($"百度翻译{Application.Current.Resources["APITest_Success_Hint"]}"); 41 | } 42 | else 43 | { 44 | HandyControl.Controls.Growl.Error($"百度翻译{Application.Current.Resources["APITest_Error_Hint"]}\n{BDTrans.GetLastError()}"); 45 | } 46 | } 47 | 48 | private void ApplyBtn_Click(object sender, RoutedEventArgs e) 49 | { 50 | System.Diagnostics.Process.Start(BaiduTranslator.GetUrl_allpyAPI()); 51 | } 52 | 53 | private void DocBtn_Click(object sender, RoutedEventArgs e) 54 | { 55 | System.Diagnostics.Process.Start(BaiduTranslator.GetUrl_Doc()); 56 | } 57 | 58 | private void BillBtn_Click(object sender, RoutedEventArgs e) 59 | { 60 | System.Diagnostics.Process.Start(BaiduTranslator.GetUrl_bill()); 61 | } 62 | 63 | private void TransTestBtn_Click(object sender, RoutedEventArgs e) 64 | { 65 | ITranslator BDTrans = new BaiduTranslator(); 66 | BDTrans.TranslatorInit(Common.appSettings.BDappID, Common.appSettings.BDsecretKey); 67 | string res = BDTrans.Translate(TestSrcText.Text, TestDstLang.Text, TestSrcLang.Text); 68 | 69 | if (res != null) 70 | { 71 | HandyControl.Controls.MessageBox.Show(res, Application.Current.Resources["MessageBox_Result"].ToString()); 72 | } 73 | else 74 | { 75 | HandyControl.Controls.Growl.Error( 76 | $"百度翻译{Application.Current.Resources["APITest_Error_Hint"]}\n{BDTrans.GetLastError()}"); 77 | } 78 | } 79 | } 80 | } -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/CaiyunTransSettingsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | using TranslatorLibrary; 16 | 17 | namespace MisakaTranslator_WPF.SettingsPages.TranslatorPages 18 | { 19 | /// 20 | /// CaiyunTransSettingsPage.xaml 的交互逻辑 21 | /// 22 | public partial class CaiyunTransSettingsPage : Page 23 | { 24 | public CaiyunTransSettingsPage() 25 | { 26 | InitializeComponent(); 27 | TransTokenBox.Text = Common.appSettings.CaiyunToken; 28 | } 29 | 30 | private void AuthTestBtn_Click(object sender, RoutedEventArgs e) 31 | { 32 | Common.appSettings.CaiyunToken = TransTokenBox.Text; 33 | ITranslator Trans = new CaiyunTranslator(); 34 | Trans.TranslatorInit(TransTokenBox.Text, ""); 35 | if (Trans.Translate("apple", "zh", "en") != null) 36 | { 37 | HandyControl.Controls.Growl.Success($"彩云小译{Application.Current.Resources["APITest_Success_Hint"]}"); 38 | } 39 | else 40 | { 41 | HandyControl.Controls.Growl.Error($"彩云小译{Application.Current.Resources["APITest_Error_Hint"]}\n{Trans.GetLastError()}"); 42 | } 43 | } 44 | 45 | private void ApplyBtn_Click(object sender, RoutedEventArgs e) 46 | { 47 | System.Diagnostics.Process.Start(CaiyunTranslator.GetUrl_allpyAPI()); 48 | } 49 | 50 | private void DocBtn_Click(object sender, RoutedEventArgs e) 51 | { 52 | System.Diagnostics.Process.Start(CaiyunTranslator.GetUrl_Doc()); 53 | } 54 | 55 | private void BillBtn_Click(object sender, RoutedEventArgs e) 56 | { 57 | System.Diagnostics.Process.Start(CaiyunTranslator.GetUrl_bill()); 58 | } 59 | 60 | private void TransTestBtn_Click(object sender, RoutedEventArgs e) 61 | { 62 | ITranslator Trans = new CaiyunTranslator(); 63 | Trans.TranslatorInit(Common.appSettings.CaiyunToken, ""); 64 | string res = Trans.Translate(TestSrcText.Text, TestDstLang.Text, TestSrcLang.Text); 65 | if (res != null) 66 | { 67 | HandyControl.Controls.MessageBox.Show(res, Application.Current.Resources["MessageBox_Result"].ToString()); 68 | } 69 | else 70 | { 71 | HandyControl.Controls.Growl.Error($"彩云小译{Application.Current.Resources["APITest_Error_Hint"]}\n{Trans.GetLastError()}"); 72 | } 73 | } 74 | } 75 | } -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/DreyeTransSettingsPage.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/DreyeTransSettingsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | using TranslatorLibrary; 16 | 17 | namespace MisakaTranslator_WPF.SettingsPages.TranslatorPages 18 | { 19 | /// 20 | /// DreyeTransSettingsPage.xaml 的交互逻辑 21 | /// 22 | public partial class DreyeTransSettingsPage : Page 23 | { 24 | public DreyeTransSettingsPage() 25 | { 26 | InitializeComponent(); 27 | PathBox.Text = Common.appSettings.DreyePath; 28 | } 29 | 30 | private void ChoosePathBtn_Click(object sender, RoutedEventArgs e) 31 | { 32 | System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog(); 33 | dialog.Description = Application.Current.Resources["DreyeTransSettingsPage_ChoosePathHint"].ToString(); 34 | if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) 35 | { 36 | if (string.IsNullOrEmpty(dialog.SelectedPath)) 37 | { 38 | HandyControl.Controls.Growl.Error(Application.Current.Resources["FilePath_Null_Hint"].ToString()); 39 | } 40 | else 41 | { 42 | PathBox.Text = dialog.SelectedPath; 43 | Common.appSettings.DreyePath = PathBox.Text; 44 | } 45 | } 46 | } 47 | 48 | private void TransTestBtn_Click(object sender, RoutedEventArgs e) 49 | { 50 | ITranslator Trans = new DreyeTranslator(); 51 | Trans.TranslatorInit(Common.appSettings.DreyePath, ""); 52 | string res = Trans.Translate(TestSrcText.Text, "zh", TestSrcLang.Text); 53 | if (res != null) 54 | { 55 | HandyControl.Controls.MessageBox.Show(res, Application.Current.Resources["MessageBox_Result"].ToString()); 56 | } 57 | else 58 | { 59 | HandyControl.Controls.Growl.Error( 60 | $"译典通翻译{Application.Current.Resources["APITest_Error_Hint"]}\n{Trans.GetLastError()}"); 61 | } 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/JbeijingTransSettingsPage.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/JbeijingTransSettingsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | using TranslatorLibrary; 16 | 17 | namespace MisakaTranslator_WPF.SettingsPages.TranslatorPages 18 | { 19 | /// 20 | /// JbeijingTransSettingsPage.xaml 的交互逻辑 21 | /// 22 | public partial class JbeijingTransSettingsPage : Page 23 | { 24 | public JbeijingTransSettingsPage() 25 | { 26 | InitializeComponent(); 27 | PathBox.Text = Common.appSettings.JBJCTDllPath; 28 | } 29 | 30 | private void TransTestBtn_Click(object sender, RoutedEventArgs e) 31 | { 32 | ITranslator Trans = new JBeijingTranslator(); 33 | Trans.TranslatorInit(Common.appSettings.JBJCTDllPath, ""); 34 | string res = Trans.Translate(TestSrcText.Text, "", ""); 35 | if (res != null) 36 | { 37 | HandyControl.Controls.MessageBox.Show(res, Application.Current.Resources["MessageBox_Result"].ToString()); 38 | } 39 | else 40 | { 41 | HandyControl.Controls.Growl.Error( 42 | $"JBeijing翻译{Application.Current.Resources["APITest_Error_Hint"]}\n{Trans.GetLastError()}"); 43 | } 44 | } 45 | 46 | private void ChoosePathBtn_Click(object sender, RoutedEventArgs e) 47 | { 48 | System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog(); 49 | dialog.Description = Application.Current.Resources["JbeijingTransSettingsPage_ChoosePathHint"].ToString(); 50 | if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) 51 | { 52 | if (string.IsNullOrEmpty(dialog.SelectedPath)) 53 | { 54 | HandyControl.Controls.Growl.Error(Application.Current.Resources["FilePath_Null_Hint"].ToString()); 55 | } 56 | else 57 | { 58 | PathBox.Text = dialog.SelectedPath; 59 | Common.appSettings.JBJCTDllPath = PathBox.Text; 60 | } 61 | } 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/KingsoftFAITTransSettingsPage.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/KingsoftFAITTransSettingsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | using TranslatorLibrary; 16 | 17 | namespace MisakaTranslator_WPF.SettingsPages.TranslatorPages 18 | { 19 | /// 20 | /// KingsoftFAITTransSettingsPage.xaml 的交互逻辑 21 | /// 22 | public partial class KingsoftFAITTransSettingsPage : Page 23 | { 24 | public KingsoftFAITTransSettingsPage() 25 | { 26 | InitializeComponent(); 27 | PathBox.Text = Common.appSettings.KingsoftFastAITPath; 28 | } 29 | 30 | private void ChoosePathBtn_Click(object sender, RoutedEventArgs e) 31 | { 32 | System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog 33 | { 34 | Description = Application.Current.Resources["KingsoftFAITTransSettingsPage_ChoosePathHint"] 35 | .ToString() 36 | }; 37 | if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) 38 | { 39 | if (string.IsNullOrEmpty(dialog.SelectedPath)) 40 | { 41 | HandyControl.Controls.Growl.Error(Application.Current.Resources["FilePath_Null_Hint"].ToString()); 42 | } 43 | else 44 | { 45 | PathBox.Text = dialog.SelectedPath; 46 | Common.appSettings.KingsoftFastAITPath = PathBox.Text; 47 | } 48 | } 49 | } 50 | 51 | private void TransTestBtn_Click(object sender, RoutedEventArgs e) 52 | { 53 | ITranslator Trans = new KingsoftFastAITTranslator(); 54 | Trans.TranslatorInit(Common.appSettings.KingsoftFastAITPath, ""); 55 | string res = Trans.Translate(TestSrcText.Text, "zh", TestSrcLang.Text); 56 | if (res != null) 57 | { 58 | HandyControl.Controls.MessageBox.Show(res, Application.Current.Resources["MessageBox_Result"].ToString()); 59 | } 60 | else 61 | { 62 | HandyControl.Controls.Growl.Error( 63 | $"金山快译翻译{Application.Current.Resources["APITest_Error_Hint"]}\n{Trans.GetLastError()}"); 64 | } 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/LocalTransSettingsPage.xaml: -------------------------------------------------------------------------------- 1 |  13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/LocalTransSettingsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | using TranslatorLibrary; 16 | 17 | namespace MisakaTranslator_WPF.SettingsPages.TranslatorPages 18 | { 19 | /// 20 | /// JbeijingTransSettingsPage.xaml 的交互逻辑 21 | /// 22 | public partial class LocalTransSettingsPage : Page 23 | { 24 | Dictionary modeLst = new Dictionary() 25 | { 26 | { "低", "low" }, 27 | { "中", "medium" }, 28 | { "高", "high" } 29 | }; 30 | public LocalTransSettingsPage() 31 | { 32 | InitializeComponent(); 33 | modeComboBox.ItemsSource = modeLst.Keys; 34 | var lst = modeLst.Values.ToList(); 35 | modeComboBox.SelectedIndex = lst.IndexOf(Common.appSettings.LocalTransMode); 36 | } 37 | 38 | private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 39 | { 40 | Common.appSettings.LocalTransMode = modeLst[(string)modeComboBox.SelectedValue]; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/TencentFYJTransSettingsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | using TranslatorLibrary; 16 | 17 | namespace MisakaTranslator_WPF.SettingsPages.TranslatorPages 18 | { 19 | /// 20 | /// TencentFYJTransSettingsPage.xaml 的交互逻辑 21 | /// 22 | public partial class TencentFYJTransSettingsPage : Page 23 | { 24 | public TencentFYJTransSettingsPage() 25 | { 26 | InitializeComponent(); 27 | TransAppIDBox.Text = Common.appSettings.TXappID; 28 | TransSecretKeyBox.Text = Common.appSettings.TXappKey; 29 | } 30 | 31 | private void AuthTestBtn_Click(object sender, RoutedEventArgs e) 32 | { 33 | Common.appSettings.TXappID = TransAppIDBox.Text; 34 | Common.appSettings.TXappKey = TransSecretKeyBox.Text; 35 | ITranslator Trans = new TencentFYJTranslator(); 36 | Trans.TranslatorInit(TransAppIDBox.Text, TransSecretKeyBox.Text); 37 | if (Trans.Translate("apple", "zh", "en") != null) 38 | { 39 | HandyControl.Controls.Growl.Success($"翻译君{Application.Current.Resources["APITest_Success_Hint"]}"); 40 | } 41 | else 42 | { 43 | HandyControl.Controls.Growl.Error($"翻译君{Application.Current.Resources["APITest_Error_Hint"]}\n{Trans.GetLastError()}"); 44 | } 45 | } 46 | 47 | private void ApplyBtn_Click(object sender, RoutedEventArgs e) 48 | { 49 | System.Diagnostics.Process.Start(TencentFYJTranslator.GetUrl_allpyAPI()); 50 | } 51 | 52 | private void DocBtn_Click(object sender, RoutedEventArgs e) 53 | { 54 | System.Diagnostics.Process.Start(TencentFYJTranslator.GetUrl_Doc()); 55 | } 56 | 57 | private void BillBtn_Click(object sender, RoutedEventArgs e) 58 | { 59 | System.Diagnostics.Process.Start(TencentFYJTranslator.GetUrl_bill()); 60 | } 61 | 62 | private void TransTestBtn_Click(object sender, RoutedEventArgs e) 63 | { 64 | ITranslator Trans = new TencentFYJTranslator(); 65 | Trans.TranslatorInit(Common.appSettings.TXappID, Common.appSettings.TXappKey); 66 | string res = Trans.Translate(TestSrcText.Text, TestDstLang.Text, TestSrcLang.Text); 67 | if (res != null) 68 | { 69 | HandyControl.Controls.MessageBox.Show(res, Application.Current.Resources["MessageBox_Result"].ToString()); 70 | } 71 | else 72 | { 73 | HandyControl.Controls.Growl.Error($"翻译君{Application.Current.Resources["APITest_Error_Hint"]}\n{Trans.GetLastError()}"); 74 | } 75 | } 76 | } 77 | } -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/TencentOldTransSettingsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | using TranslatorLibrary; 16 | 17 | namespace MisakaTranslator_WPF.SettingsPages.TranslatorPages 18 | { 19 | /// 20 | /// TencentOldTransSettingsPage.xaml 的交互逻辑 21 | /// 22 | public partial class TencentOldTransSettingsPage : Page 23 | { 24 | public TencentOldTransSettingsPage() 25 | { 26 | InitializeComponent(); 27 | TransAppIDBox.Text = Common.appSettings.TXOSecretId; 28 | TransSecretKeyBox.Text = Common.appSettings.TXOSecretKey; 29 | } 30 | 31 | private void AuthTestBtn_Click(object sender, RoutedEventArgs e) 32 | { 33 | Common.appSettings.TXOSecretId = TransAppIDBox.Text; 34 | Common.appSettings.TXOSecretKey = TransSecretKeyBox.Text; 35 | ITranslator Trans = new TencentOldTranslator(); 36 | Trans.TranslatorInit(TransAppIDBox.Text, TransSecretKeyBox.Text); 37 | if (Trans.Translate("apple", "zh", "en") != null) 38 | { 39 | HandyControl.Controls.Growl.Success($"腾讯私人{Application.Current.Resources["APITest_Success_Hint"]}"); 40 | } 41 | else 42 | { 43 | HandyControl.Controls.Growl.Error($"腾讯私人{Application.Current.Resources["APITest_Error_Hint"]}\n{Trans.GetLastError()}"); 44 | } 45 | } 46 | 47 | private void ApplyBtn_Click(object sender, RoutedEventArgs e) 48 | { 49 | System.Diagnostics.Process.Start(TencentOldTranslator.GetUrl_allpyAPI()); 50 | } 51 | 52 | private void DocBtn_Click(object sender, RoutedEventArgs e) 53 | { 54 | System.Diagnostics.Process.Start(TencentOldTranslator.GetUrl_Doc()); 55 | } 56 | 57 | private void BillBtn_Click(object sender, RoutedEventArgs e) 58 | { 59 | System.Diagnostics.Process.Start(TencentOldTranslator.GetUrl_bill()); 60 | } 61 | 62 | private void TransTestBtn_Click(object sender, RoutedEventArgs e) 63 | { 64 | ITranslator Trans = new TencentOldTranslator(); 65 | Trans.TranslatorInit(Common.appSettings.TXOSecretId, Common.appSettings.TXOSecretKey); 66 | string res = Trans.Translate(TestSrcText.Text, TestDstLang.Text, TestSrcLang.Text); 67 | if (res != null) 68 | { 69 | HandyControl.Controls.MessageBox.Show(res, Application.Current.Resources["MessageBox_Result"].ToString()); 70 | } 71 | else 72 | { 73 | HandyControl.Controls.Growl.Error($"腾讯私人{Application.Current.Resources["APITest_Error_Hint"]}\n{Trans.GetLastError()}"); 74 | } 75 | } 76 | } 77 | } -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/TranslatorGeneralSettingsPage.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/TranslatorGeneralSettingsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | using TranslatorLibrary; 16 | 17 | namespace MisakaTranslator_WPF.SettingsPages 18 | { 19 | /// 20 | /// TranslatorGeneralSettingsPage.xaml 的交互逻辑 21 | /// 22 | public partial class TranslatorGeneralSettingsPage : Page 23 | { 24 | private List TranslatorList; 25 | 26 | private List WordSpliterList; 27 | 28 | public TranslatorGeneralSettingsPage() 29 | { 30 | InitializeComponent(); 31 | TranslatorList = CommonFunction.GetTranslatorList(); 32 | WordSpliterList = CommonFunction.GetWordSpliterList(); 33 | FirstTransCombox.ItemsSource = TranslatorList; 34 | //SecondTransCombox.ItemsSource = TranslatorList; 35 | WordSplitorCombox.ItemsSource = WordSpliterList; 36 | 37 | FirstTransCombox.SelectedIndex = CommonFunction.GetTranslatorIndex(Common.appSettings.FirstTranslator); 38 | //SecondTransCombox.SelectedIndex = CommonFunction.GetTranslatorIndex(Common.appSettings.SecondTranslator); 39 | 40 | EachRowTransCheckBox.IsChecked = Convert.ToBoolean(Common.appSettings.EachRowTrans); 41 | 42 | TransLimitBox.Value = Common.appSettings.TransLimitNums; 43 | } 44 | 45 | private void FirstTransCombox_SelectionChanged(object sender, SelectionChangedEventArgs e) 46 | { 47 | Common.appSettings.FirstTranslator = CommonFunction.lstTranslator[(string)FirstTransCombox.SelectedValue]; 48 | } 49 | 50 | //private void SecondTransCombox_SelectionChanged(object sender, SelectionChangedEventArgs e) 51 | //{ 52 | // Common.appSettings.SecondTranslator = CommonFunction.lstTranslator[(string)SecondTransCombox.SelectedValue]; 53 | //} 54 | private void WordSpliterCombox_SelectionChanged(object sender, SelectionChangedEventArgs e) 55 | { 56 | Common.appSettings.WordSpliter = CommonFunction.lstWordSpliter[(string)WordSplitorCombox.SelectedValue]; 57 | } 58 | 59 | private void EachRowTransCheckBox_Click(object sender, RoutedEventArgs e) 60 | { 61 | Common.appSettings.EachRowTrans = Convert.ToString(EachRowTransCheckBox.IsChecked); 62 | } 63 | 64 | private void TransLimitBox_ValueChanged(object sender, HandyControl.Data.FunctionEventArgs e) 65 | { 66 | Common.appSettings.TransLimitNums = (int)TransLimitBox.Value; 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsPages/TranslatorPages/XiaoniuTransSettingsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | using TranslatorLibrary; 16 | 17 | namespace MisakaTranslator_WPF.SettingsPages.TranslatorPages 18 | { 19 | /// 20 | /// XiaoniuTransSettingsPage.xaml 的交互逻辑 21 | /// 22 | public partial class XiaoniuTransSettingsPage : Page 23 | { 24 | public XiaoniuTransSettingsPage() 25 | { 26 | InitializeComponent(); 27 | TransTokenBox.Text = Common.appSettings.xiaoniuApiKey; 28 | } 29 | 30 | private void AuthTestBtn_Click(object sender, RoutedEventArgs e) 31 | { 32 | Common.appSettings.xiaoniuApiKey = TransTokenBox.Text; 33 | ITranslator Trans = new XiaoniuTranslator(); 34 | Trans.TranslatorInit(TransTokenBox.Text, ""); 35 | if (Trans.Translate("apple", "zh", "en") != null) 36 | { 37 | HandyControl.Controls.Growl.Success($"小牛翻译{Application.Current.Resources["APITest_Success_Hint"]}"); 38 | } 39 | else 40 | { 41 | HandyControl.Controls.Growl.Error($"小牛翻译{Application.Current.Resources["APITest_Error_Hint"]}\n{Trans.GetLastError()}"); 42 | } 43 | } 44 | 45 | private void ApplyBtn_Click(object sender, RoutedEventArgs e) 46 | { 47 | System.Diagnostics.Process.Start(XiaoniuTranslator.GetUrl_allpyAPI()); 48 | } 49 | 50 | private void DocBtn_Click(object sender, RoutedEventArgs e) 51 | { 52 | System.Diagnostics.Process.Start(XiaoniuTranslator.GetUrl_Doc()); 53 | } 54 | 55 | private void BillBtn_Click(object sender, RoutedEventArgs e) 56 | { 57 | System.Diagnostics.Process.Start(XiaoniuTranslator.GetUrl_bill()); 58 | } 59 | 60 | private void TransTestBtn_Click(object sender, RoutedEventArgs e) 61 | { 62 | ITranslator Trans = new XiaoniuTranslator(); 63 | Trans.TranslatorInit(Common.appSettings.xiaoniuApiKey, ""); 64 | string res = Trans.Translate(TestSrcText.Text, TestDstLang.Text, TestSrcLang.Text); 65 | if (res != null) 66 | { 67 | HandyControl.Controls.MessageBox.Show(res, Application.Current.Resources["MessageBox_Result"].ToString()); 68 | } 69 | else 70 | { 71 | HandyControl.Controls.Growl.Error($"小牛翻译{Application.Current.Resources["APITest_Error_Hint"]}\n{Trans.GetLastError()}"); 72 | } 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/SettingsWindow.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /MisakaTranslator-WPF/UserControls/GameNameDialog.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 |