diff --git a/README.md b/README.md index 0d70700..93ba0ba 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Textractor -[日本語](https://github.com/Artikash/Textractor/blob/master/README_JP.md) [Español](https://github.com/Artikash/Textractor/blob/master/README_ES.md) +[日本語](https://github.com/Artikash/Textractor/blob/master/README_JP.md) [Español](https://github.com/Artikash/Textractor/blob/master/README_ES.md) [简体中文](https://github.com/Artikash/Textractor/blob/master/README_SC.md) ## [Tutorial Video](https://youtu.be/eecEOacF6mw) @@ -54,6 +54,7 @@ If you're on this list and want your link changed let me know. - Textractor made by [Me](https://github.com/Artikash) and [DoumanAsh](https://github.com/DoumanAsh) - Spanish translation by [scese250](https://github.com/scese250) - Turkish translation by niisokusu +- Simplified Chinese translation by [tinyAdapter](https://github.com/tinyAdapter) - ITHVNR updated by [mireado](https://github.com/mireado) and [Eguni](https://github.com/Eguni) - ITHVNR originally made by [Stomp](http://www.hongfire.com/forum/member/325894-stomp) - VNR engine made by [jichi](https://archive.is/prJwr) diff --git a/README_SC.md b/README_SC.md new file mode 100644 index 0000000..5a0390e --- /dev/null +++ b/README_SC.md @@ -0,0 +1,65 @@ +# Textractor + +## 概述 + +**Textractor** (曾用名: NextHooker) 是一个基于 [ITHVNR](http://www.hongfire.com/forum/showthread.php/438331-ITHVNR-ITH-with-the-VNR-engine), 为 Windows/Wine 开发的开源 x86/x64 文本提取器.
+ +![它工作起来的样子](https://media.discordapp.net/attachments/330538905072041994/539414661796200448/unknown.png?width=1072&height=398) + +## 下载 + +Textractor 的发行版可以在[这里](https://github.com/Artikash/Textractor/releases)找到. + +老版 ITHVNR 可以在[这里](https://github.com/mireado/ITHVNR/releases)找到. + +## 特点 + +- 高度可扩展 +- 自动从很多游戏中提取 (包括一些没有被 VNR 支持的!) +- 通过 /H "hook" 码提取文本 (支持大多数 AGTH 码) +- 使用 /R "read" 码直接抽取文本 + +## 扩展 + +通过我的[扩展示例项目](https://github.com/Artikash/ExampleExtension)查看如何构建扩展.
+通过 extensions 文件夹查看扩展能够做什么. + +## 贡献 + +欢迎一切贡献!如有任何关于代码的疑问,请向 akashmozumdar@gmail.com 发邮件 (不,我并不忙!).
+你应当使用创建 PR 的标准过程 (分岔 (fork), 分支 (branch), 提交变化, 创建从你的分支到我的 master 分支的 PR).
+提供翻译贡献很简单: 只需翻译 include/text.h 中的字符串和这份 README 即可. + +## 编译 + +编译 *Textractor* 前, 你应当获取支持 CMake 的 Visual Studio, 以及 Qt 5.11 版.
+之后就可以使用 Visual Studio 打开文件夹, 然后构建. 运行 Textractor.exe. + +## 项目架构 + +宿主 (位于 GUI/host 文件夹) 向目标进程注入 vnrhook.dll (由 vnrhook 文件夹创建) 并通过两个管道文件互联.
+宿主向 hostPipe 写入, vnrhook 向 hookPipe 写入.
+vnrhook 等待管道连接, 之后向一些文本输出函数 (如 TextOut, GetGlyphOutline) 注入一系列指令, 使得它们的输入被沿着管道发送.
+其它关于钩子的信息通过一个被 TextHook 类保有引用的文件视图 (曾用名: 段对象) 共享.
+之后, 宿主通过管道接收到的文本在传回 GUI 前被简单处理.
+最后, GUI 在显示文本前将其分发给扩展. + +## 开发者 + +如果你在这个列表上,并且想要改变你的链接,请告诉我. + +- 由 [我](https://github.com/Artikash) 和 [DoumanAsh](https://github.com/DoumanAsh) 开发 Textractor +- 由 [scese250](https://github.com/scese250) 提供西班牙语翻译 +- 由 niisokusu 提供土耳其语翻译 +- 由 [tinyAdapter](https://github.com/tinyAdapter) 提供简体中文翻译 +- 由 [mireado](https://github.com/mireado) 和 [Eguni](https://github.com/Eguni) 提供 ITHVNR 更新 +- 由 [Stomp](http://www.hongfire.com/forum/member/325894-stomp) 开发初版 ITHVNR +- 由 [jichi](https://archive.is/prJwr) 开发 VNR 引擎 +- 由 [Andys](https://github.com/AndyScull) 提供 ITH 更新 +- 由 [kaosu](http://www.hongfire.com/forum/member/562651-kaosu) 开发初版 ITH +- 由 [xupefei](https://github.com/xupefei) 开发 Locale Emulator 库 +- 由 [TsudaKageyu](https://github.com/TsudaKageyu) 开发 MinHook 库 + +## 特别感谢 + +- 所有添加 issue 的人! diff --git a/include/text.h b/include/text.h index 86be255..ae8612e 100644 --- a/include/text.h +++ b/include/text.h @@ -218,5 +218,91 @@ Clic y arrastra los bordes de la ventana para moverla, o en la esquina inferior INVALID_REGEX = u8"Regex inválido"; CURRENT_FILTER = u8"Actualmente filtrando: "; #endif // SPANISH + +#ifdef SIMPLIFIED_CHINESE + ATTACH = u8"附加到游戏"; + LAUNCH = u8"启动游戏"; + DETACH = u8"从游戏分离"; + ADD_HOOK = u8"添加钩子"; + SAVE_HOOKS = u8"保存钩子"; + SETTINGS = u8"设置"; + EXTENSIONS = u8"扩展"; + SELECT_PROCESS = u8"选择进程"; + ATTACH_INFO = u8R"(如果没看见想要附加的进程,尝试使用管理员权限运行 +也可以手动输入进程ID)"; + SEARCH_GAME = u8"从计算机中选择"; + PROCESSES = u8"进程 (*.exe)"; + CODE_INFODUMP = u8R"(搜索文本 +S[codepage#]text +或 +输入 read 码 (R码) +R{S|Q|V}[codepage#][*deref_offset]@addr +或 +输入 hook 码 (H码) +H{A|B|W|S|Q|V}[N][codepage#]data_offset[*deref_offset1][:split_offset[*deref_offset2]]@addr[:module[:func]] +除代码页外,所有的数字都必须使用16进制 +默认代码页为 932 (Shift-JIS) 但可以通过设置修改 +A/B: 代码页字符为小端 (little endian) / 大端 (big endian) +W: UTF-16 字符 +S/Q/V: 代码页/UTF-16/UTF-8 字符串 +负数对应相对于寄存器的数据 (data) / 分割 (split) 偏移 +-4 对应 EAX, -8 对应 ECX, -C 对应 EDX, -10 对应 EBX, -14 对应 ESP, -18 对应 EBP, -1C 对应 ESI, -20 对应 EDI +* 意味着解引用 pointer+deref_offset)"; + SAVE_SETTINGS = u8"保存设置"; + EXTEN_WINDOW_INSTRUCTIONS = u8R"(从计算机拖拽扩展 (.dll) 文件到这里来添加 +(如果使用超级管理员运行,则无法工作) +在列表中拖拽来重新排序 +使用 delete 键移除选中的扩展)"; + WINDOW = u8"窗口"; + USE_JP_LOCALE = u8"模拟日本区域设置?"; + DEFAULT_CODEPAGE = u8"默认代码页"; + FLUSH_DELAY = u8"刷新延迟"; + MAX_BUFFER_SIZE = u8"最大缓冲区长度"; + CONSOLE = L"控制台"; + CLIPBOARD = L"剪贴板"; + ABOUT = L"Textractor v" CURRENT_VERSION LR"( 作者: Artikash (email: akashmozumdar@gmail.com) +项目主页: https://github.com/Artikash/Textractor +教程视频: https://www.youtube.com/watch?v=eecEOacF6mw +如果有任何关于 Textractor 的困难,功能请求或问题,请联系我 +可以通过项目主页 (问题区) 或通过邮件来联系 +项目主页提供基于 GPLv3 协议的源代码 +我目前正在寻找新的工作: 如果你知道在美国招聘软件工程师岗位的人,请给我发邮件)"; + UPDATE_AVAILABLE = L"有可用的更新: 请从 https://github.com/Artikash/Textractor/releases 下载"; + ALREADY_INJECTED = L"Textractor: 已经注入"; + ARCHITECTURE_MISMATCH = L"Textractor: 架构不匹配: 请尝试使用 32 位的 Textractor"; + INJECT_FAILED = L"Textractor: 无法注入"; + LAUNCH_FAILED = L"Textractor: 无法启动"; + INVALID_CODE = L"Textractor: 无效代码"; + INVALID_CODEPAGE = L"Textractor: 无法转换文本 (无效的代码页?)"; + PIPE_CONNECTED = u8"Textractor: 管道已连接"; + INSERTING_HOOK = u8"Textractor: 注入钩子: %s"; + REMOVING_HOOK = u8"Textractor: 移除钩子: %s"; + HOOK_FAILED = u8"Textractor: 钩子注入失败"; + TOO_MANY_HOOKS = u8"Textractor: 钩子太多: 无法注入"; + NOT_ENOUGH_TEXT = u8"Textractor: 没有足够的文本来精确搜索"; + FUNC_MISSING = u8"Textractor: 函数不存在"; + MODULE_MISSING = u8"Textractor: 模块不存在"; + GARBAGE_MEMORY = u8"Textractor: 内存一直在变,读了也没用"; + SEND_ERROR = u8"Textractor: Sender 错误 (H码可能不正确)"; + READ_ERROR = u8"Textractor: Reader 错误 (R码可能不正确)"; + HIJACK_ERROR = u8"Textractor: Hijack 错误"; + COULD_NOT_FIND = u8"Textractor: 无法找到文本"; + SELECT_LANGUAGE = u8"选择语言"; + BING_PROMPT = u8"想要使用 Bing 翻译到哪种语言?"; + GOOGLE_PROMPT = u8"想要使用 Google 翻译到哪种语言?"; + TOO_MANY_TRANS_REQUESTS = LR"( +太多翻译请求: 拒绝生成更多)"; + TRANSLATION_ERROR = L"翻译时出错"; + EXTRA_WINDOW_INFO = u8R"(右键修改设置 +在窗口边缘点击并拖拽来移动,或在右下角点击并拖拽来调整大小)"; + BG_COLOR = u8"背景颜色"; + TEXT_COLOR = u8"文本颜色"; + FONT_SIZE = u8"字体大小"; + TOPMOST = u8"总是位于最上层"; + ALWAYS_ON_TOP = u8"将本窗口在保持最上层"; + REGEX_FILTER = u8"正则表达式过滤器"; + INVALID_REGEX = u8"无效的正则表达式"; + CURRENT_FILTER = u8"当前过滤中: "; +#endif // SIMPLIFIED_CHINESE return 0; });