diff --git a/CMakeLists.txt b/CMakeLists.txt index 2e88715..21bff98 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,9 @@ set(CMAKE_CONFIGURATION_TYPES Debug Release) file(COPY ${LIBS} DESTINATION ${CMAKE_FINAL_OUTPUT_DIRECTORY}) +add_library(text text.cpp) +link_libraries(text) + add_subdirectory(GUI) add_subdirectory(GUI/host) add_subdirectory(vnrhook) diff --git a/GUI/CMakeLists.txt b/GUI/CMakeLists.txt index 10c1fb6..5969a92 100644 --- a/GUI/CMakeLists.txt +++ b/GUI/CMakeLists.txt @@ -4,8 +4,6 @@ find_qt5(Core Widgets) set(AUTOMOC OFF) set(RESOURCE_FILES Textractor.rc Textractor.ico) -add_compile_options(/GL) -# Populate a CMake variable with the sources set(gui_src main.cpp mainwindow.cpp @@ -19,4 +17,4 @@ set(gui_src add_executable(${PROJECT_NAME} WIN32 ${gui_src}) target_link_libraries(${PROJECT_NAME} Qt5::Widgets winhttp) -install_qt5_libs(${PROJECT_NAME}) +install_qt5_libs(${PROJECT_NAME}) # can be commented out for consecutive builds diff --git a/README.md b/README.md index ddee5b0..64f63d7 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ See the extensions folder for examples of what extensions can do. All contributions are appreciated! Please email (no, I'm not busy!) me at akashmozumdar@gmail.com if you have any questions about the codebase.
You should use the standard process of making a pull request (fork, branch, commit changes, make PR from your branch to my master).
-Contributing a translation is easy: just translate the strings in include/text.h as well as this README. +Contributing a translation is easy: just translate the strings in text.cpp as well as this README. ## Compiling diff --git a/README_SC.md b/README_SC.md index 5a0390e..21205d7 100644 --- a/README_SC.md +++ b/README_SC.md @@ -28,7 +28,7 @@ Textractor 的发行版可以在[这里](https://github.com/Artikash/Textractor/ 欢迎一切贡献!如有任何关于代码的疑问,请向 akashmozumdar@gmail.com 发邮件 (不,我并不忙!).
你应当使用创建 PR 的标准过程 (分岔 (fork), 分支 (branch), 提交变化, 创建从你的分支到我的 master 分支的 PR).
-提供翻译贡献很简单: 只需翻译 include/text.h 中的字符串和这份 README 即可. +提供翻译贡献很简单: 只需翻译 text.cpp 中的字符串和这份 README 即可. ## 编译 diff --git a/include/text.h b/include/text.h index 123c775..c8c39ec 100644 --- a/include/text.h +++ b/include/text.h @@ -2,307 +2,64 @@ #define CURRENT_VERSION "1.3.0" -inline auto ATTACH = u8"Attach to game"; -inline auto LAUNCH = u8"Launch game"; -inline auto DETACH = u8"Detach from game"; -inline auto ADD_HOOK = u8"Add hook"; -inline auto SAVE_HOOKS = u8"Save hook(s)"; -inline auto SETTINGS = u8"Settings"; -inline auto EXTENSIONS = u8"Extensions"; -inline auto SELECT_PROCESS = u8"Select Process"; -inline auto ATTACH_INFO = u8R"(If you don't see the process you want to attach, try running with admin rights -You can also type in the process id)"; -inline auto SEARCH_GAME = u8"Select from computer"; -inline auto PROCESSES = u8"Processes (*.exe)"; -inline auto CODE_INFODUMP = u8R"(Search for text -S[codepage#]text -OR -Enter read code -R{S|Q|V}[codepage#][*deref_offset]@addr -OR -Enter hook code -H{A|B|W|S|Q|V}[N][codepage#]data_offset[*deref_offset1][:split_offset[*deref_offset2]]@addr[:module[:func]] -All numbers except codepage in hexadecimal -Default codepage is 932 (Shift-JIS) but this can be changed in settings -A/B: codepage char little/big endian -W: UTF-16 char -S/Q/V: codepage/UTF-16/UTF-8 string -Negatives for data/split offset refer to registers --4 for EAX, -8 for ECX, -C for EDX, -10 for EBX, -14 for ESP, -18 for EBP, -1C for ESI, -20 for EDI -* means dereference pointer+deref_offset)"; -inline auto SAVE_SETTINGS = u8"Save settings"; -inline auto EXTEN_WINDOW_INSTRUCTIONS = u8R"(Drag and drop extension (.dll) files here from your computer to add them -(Does not work if running as administrator) -Drag and drop within the list to reorder -Press delete with an extension selected to remove it)"; -inline auto WINDOW = u8"Window"; -inline auto USE_JP_LOCALE = u8"Emulate japanese locale?"; -inline auto DEFAULT_CODEPAGE = u8"Default Codepage"; -inline auto FLUSH_DELAY = u8"Flush Delay"; -inline auto MAX_BUFFER_SIZE = u8"Max Buffer Size"; -inline auto CONSOLE = L"Console"; -inline auto CLIPBOARD = L"Clipboard"; -inline auto ABOUT = L"Textractor v" CURRENT_VERSION LR"( made by me: Artikash (email: akashmozumdar@gmail.com) -Project homepage: https://github.com/Artikash/Textractor -Tutorial video: https://www.youtube.com/watch?v=eecEOacF6mw -Please contact me with any problems, feature requests, or questions relating to Textractor -You can do so via the project homepage (issues section) or via email -Source code available under GPLv3 at project homepage -I'm currently looking for a new job: email me if you know anyone hiring US software engineers)"; -inline auto UPDATE_AVAILABLE = L"Update available: download it from https://github.com/Artikash/Textractor/releases"; -inline auto ALREADY_INJECTED = L"Textractor: already injected"; -inline auto ARCHITECTURE_MISMATCH = L"Textractor: architecture mismatch: try 32 bit Textractor instead"; -inline auto INJECT_FAILED = L"Textractor: couldn't inject"; -inline auto LAUNCH_FAILED = L"Textractor: couldn't launch"; -inline auto INVALID_CODE = L"Textractor: invalid code"; -inline auto INVALID_CODEPAGE = L"Textractor: couldn't convert text (invalid codepage?)"; -inline auto PIPE_CONNECTED = u8"Textractor: pipe connected"; -inline auto INSERTING_HOOK = u8"Textractor: inserting hook: %s"; -inline auto REMOVING_HOOK = u8"Textractor: removing hook: %s"; -inline auto HOOK_FAILED = u8"Textractor: failed to insert hook"; -inline auto TOO_MANY_HOOKS = u8"Textractor: too many hooks: can't insert"; -inline auto NOT_ENOUGH_TEXT = u8"Textractor: not enough text to search accurately"; -inline auto FUNC_MISSING = u8"Textractor: function not present"; -inline auto MODULE_MISSING = u8"Textractor: module not present"; -inline auto GARBAGE_MEMORY = u8"Textractor: memory constantly changing, useless to read"; -inline auto SEND_ERROR = u8"Textractor: Send ERROR (likely an incorrect H-code)"; -inline auto READ_ERROR = u8"Textractor: Reader ERROR (likely an incorrect R-code)"; -inline auto HIJACK_ERROR = u8"Textractor: Hijack ERROR"; -inline auto COULD_NOT_FIND = u8"Textractor: could not find text"; -inline auto SELECT_LANGUAGE = u8"Select Language"; -inline auto BING_PROMPT = u8"What language should Bing translate to?"; -inline auto GOOGLE_PROMPT = u8"What language should Google translate to?"; -inline auto TOO_MANY_TRANS_REQUESTS = LR"( -Too many translation requests: refuse to make more)"; -inline auto TRANSLATION_ERROR = L"Error while translating"; -inline auto EXTRA_WINDOW_INFO = u8R"(Right click to change settings -Click and drag on window edges to move, or the bottom right corner to resize)"; -inline auto BG_COLOR = u8"Background Color"; -inline auto TEXT_COLOR = u8"Text Color"; -inline auto FONT_SIZE = u8"Font Size"; -inline auto TOPMOST = u8"Always on Top"; -inline auto ALWAYS_ON_TOP = u8"Keep this window on top"; -inline auto REGEX_FILTER = u8"Regex Filter"; -inline auto INVALID_REGEX = u8"Invalid regex"; -inline auto CURRENT_FILTER = u8"Currently filtering: "; -inline auto REPLACER_INSTRUCTIONS = LR"(This file only does anything when the "Replacer" extension is used. -Replacement commands must be formatted like this: -|ORIG|original_text|BECOMES|replacement_text|END| -All text in this file outside of a replacement command is ignored. -Whitespace in original_text is ignored, but replacement_text can contain spaces, newlines, etc. -This file must be encoded in Unicode (UTF-16 little endian). -)"; -inline auto THREAD_LINKER = u8"Thread Linker"; -inline auto LINK = u8"Link"; -inline auto THREAD_LINK_FROM = u8"Thread number to link from"; -inline auto THREAD_LINK_TO = u8"Thread number to link to"; - -inline auto LANG__INIT__DUMMY = std::invoke([] -{ -#ifdef TURKISH - ATTACH = u8"Oyuna bağla"; - DETACH = u8"Oyundan kopar"; - ADD_HOOK = u8"Kanca ekle"; - SAVE_HOOKS = u8"Kancaları kaydet"; - SETTINGS = u8"Ayarlar"; - EXTENSIONS = u8"Uzantılar"; - SELECT_PROCESS = u8"İşlem Seçin"; - ATTACH_INFO = u8"Bağlanmak istediğiniz işlemi görmüyorsanız yönetici olarak çalıştırmayı deneyin"; - WINDOW = u8"Pencere"; - DEFAULT_CODEPAGE = u8"Varsayılan Kod Sayfası"; - FLUSH_DELAY = u8"Temizleme Gecikmesi"; - MAX_BUFFER_SIZE = u8"Maksimum Arabellek Boyu"; - ABOUT = L"Textractor v" CURRENT_VERSION LR"( (proje ana sayfası: https://github.com/Artikash/Textractor) -Benim tarafımdan yapıldı: Artikash (e-posta: akashmozumdar@gmail.com) -Textractor ile ilgili tüm sorunlarınız, istekleriniz ve sorularınız için lütfen benimle iletişime geçin -Benimle, proje ana sayfasından (“issues” kısmından) ya da e-posta aracılığıyla iletişime geçebilirsiniz -Kaynak kodu GKLv3 koruması altında proje ana sayfasında mevcut -Şu anda iş aramaktayım: Eğer ABD’li yazılım mühendislerini işe alıyorsanız lütfen bana e-posta atın)"; - UPDATE_AVAILABLE = L"Güncelleme mevcut: https://github.com/Artikash/Textractor/releases adresinden indirin"; - ALREADY_INJECTED = L"Textractor: Zaten enjekte edili"; - ARCHITECTURE_MISMATCH = L"Textractor: Mimari uyumsuzluğu: Lütfen Textractor’ın 32 bitlik sürümünü deneyin"; - INJECT_FAILED = L"Textractor: Enjekte edilemedi"; - INVALID_CODE = L"Textractor: Geçersiz kod"; - INVALID_CODEPAGE = L"Textractor: Metne dönüştürülemedi (geçersiz kod sayfası?)"; - PIPE_CONNECTED = u8"Textractor: Boru bağlandı"; - INSERTING_HOOK = u8"Textractor: Kanca ekleniyor: %s"; - REMOVING_HOOK = u8"Textractor: Kanca çıkarılıyor:: %s"; - HOOK_FAILED = u8"Textractor: Kanca eklenemedi"; - TOO_MANY_HOOKS = u8"Textractor: Çok fazla kanca var: Eklenemiyor"; - FUNC_MISSING = u8"Textractor: Fonksiyon mevcut değil"; - MODULE_MISSING = u8"Textractor: Modül mevcut değil"; - GARBAGE_MEMORY = u8"Textractor: Hafıza sürekli değişiyor, okumak boşa"; -#endif // TURKISH - -#ifdef SPANISH - ATTACH = u8"Adjuntar juego"; - LAUNCH = u8"Iniciar juego"; - DETACH = u8"Desconectar juego"; - ADD_HOOK = u8"Añadir hook"; - SAVE_HOOKS = u8"Guardar hook(s)"; - SETTINGS = u8"Opciones"; - EXTENSIONS = u8"Extensiones"; - SELECT_PROCESS = u8"Seleccionar procreso"; - ATTACH_INFO = u8R"(Si no ves el proceso que quieras adjuntar, ejecuta este programa como administrador -También puedes escribir la ID del proceso)"; - SEARCH_GAME = u8"Seleccionar desde computadora"; - PROCESSES = u8"Procesos (*.exe)"; - CODE_INFODUMP = u8R"(Buscar texto -S[codepage#]texto -O -Ingresar código de lectura -R{S|Q|V}[codepage#][*deref_offset]@addr -O -Ingresar hook code (H-code) -H{A|B|W|S|Q|V}[N][codepage#]data_offset[*deref_offset1][:split_offset[*deref_offset2]]@addr[:module[:func]] -Todos los números excepto codepage en hexedécimal -Codepage por defecto es 932 (Shift-JIS) pero se puede cambiar en opciones -A/B: codepage char little/big endian -W: UTF-16 char -S/Q/V: codepage/UTF-16/UTF-8 string -Negatives for data/split offset refer to registers --4 for EAX, -8 for ECX, -C for EDX, -10 for EBX, -14 for ESP, -18 for EBP, -1C for ESI, -20 for EDI -* means dereference pointer+deref_offset)"; - SAVE_SETTINGS = u8"Guardar opciones"; - EXTEN_WINDOW_INSTRUCTIONS = u8R"(Arrrastra y suelta la extension (.dll) aquí desde tu computadora para añadirlos -Arrastra y suelta la lista para reordenar -Presiona supr en una extension seleccionada para removerla)"; - WINDOW = u8"Ventana"; - USE_JP_LOCALE = u8"¿Emular idioma japonés?"; - DEFAULT_CODEPAGE = u8"Default Codepage"; - FLUSH_DELAY = u8"Flush Delay"; - MAX_BUFFER_SIZE = u8"Max Buffer Size"; - CONSOLE = L"Consola"; - CLIPBOARD = L"Portapapeles"; - ABOUT = L"Textractor v" CURRENT_VERSION LR"( hecho por mí: Artikash (correo: akashmozumdar@gmail.com) -Página del proyecto: https://github.com/Artikash/Textractor -Video tutorial: https://www.youtube.com/watch?v=eecEOacF6mw -No dudes en conectarme si tienes algún problema, petición de característica o preguntas relacionadas con Textractor -Puedes hacerlo en la página del proyecto (en el apartado de "Issues") o por correo. Usa el inglés para comunicarte. -Código fuente disponible bajo GPLv3 en la página del proyecto -Estoy buscando un nuevo trabajo: por favor envíame un correo si estás contratando ingenieros de software de EE.UU.)"; - UPDATE_AVAILABLE = L"Actualización disponible: descárguela en https://github.com/Artikash/Textractor/releases"; - ALREADY_INJECTED = L"Textractor: ya inyectado"; - ARCHITECTURE_MISMATCH = L"Textractor: architecture mismatch: try 32 bit Textractor instead"; - INJECT_FAILED = L"Textractor: no se puede inyectar"; - LAUNCH_FAILED = L"Textractor: no se puede iniciar"; - INVALID_CODE = L"Textractor: código inválido"; - INVALID_CODEPAGE = L"Textractor: no se puede convertir texto (¿Codepage inválido?)"; - PIPE_CONNECTED = u8"Textractor: pipe connected"; - INSERTING_HOOK = u8"Textractor: insertando hook: %s"; - REMOVING_HOOK = u8"Textractor: removiendo hook: %s"; - HOOK_FAILED = u8"Textractor: no se puede insertar hook"; - TOO_MANY_HOOKS = u8"Textractor: demasiados hooks: no se puede insertar"; - NOT_ENOUGH_TEXT = u8"Textractor: no hay suficiente texto para buscar con precisión"; - FUNC_MISSING = u8"Textractor: función no presente"; - MODULE_MISSING = u8"Textractor: module not present"; - GARBAGE_MEMORY = u8"Textractor: memory constantly changing, useless to read"; - SEND_ERROR = u8"Textractor: Send ERROR (probablemente un H-code incorrecto)"; - READ_ERROR = u8"Textractor: Reader ERROR (probablemente un R-code incorrecto)"; - HIJACK_ERROR = u8"Textractor: Hijack ERROR"; - COULD_NOT_FIND = u8"Textractor: no se puede encontrar texto"; - SELECT_LANGUAGE = u8"Seleccionar lenguaje"; - BING_PROMPT = u8"¿A qué idioma debe traducir Bing?"; - GOOGLE_PROMPT = u8"¿A qué idioma debe traducir Google?"; - TOO_MANY_TRANS_REQUESTS = LR"( -Demasiadas peticiones de traducción: no se puede hacer más)"; - TRANSLATION_ERROR = L"Error al traducir"; - EXTRA_WINDOW_INFO = u8R"(Clic derecho para configurar -Clic y arrastra los bordes de la ventana para moverla, o en la esquina inferior derecha para cambiar el tamaño)"; - BG_COLOR = u8"Color de fondo"; - TEXT_COLOR = u8"Color de texto"; - FONT_SIZE = u8"Tamaño de letra"; - TOPMOST = u8"Siempre visible"; - ALWAYS_ON_TOP = u8"Matener esta ventana encima"; - REGEX_FILTER = u8"Filtro Regex"; - 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; -}); +extern const char* ATTACH; +extern const char* LAUNCH; +extern const char* DETACH; +extern const char* ADD_HOOK; +extern const char* SAVE_HOOKS; +extern const char* SETTINGS; +extern const char* EXTENSIONS; +extern const char* SELECT_PROCESS; +extern const char* ATTACH_INFO; +extern const char* SEARCH_GAME; +extern const char* PROCESSES; +extern const char* CODE_INFODUMP; +extern const char* SAVE_SETTINGS; +extern const char* EXTEN_WINDOW_INSTRUCTIONS; +extern const char* WINDOW; +extern const char* USE_JP_LOCALE; +extern const char* DEFAULT_CODEPAGE; +extern const char* FLUSH_DELAY; +extern const char* MAX_BUFFER_SIZE; +extern const wchar_t* CONSOLE; +extern const wchar_t* CLIPBOARD; +extern const wchar_t* ABOUT; +extern const wchar_t* UPDATE_AVAILABLE; +extern const wchar_t* ALREADY_INJECTED; +extern const wchar_t* ARCHITECTURE_MISMATCH; +extern const wchar_t* INJECT_FAILED; +extern const wchar_t* LAUNCH_FAILED; +extern const wchar_t* INVALID_CODE; +extern const wchar_t* INVALID_CODEPAGE; +extern const char* PIPE_CONNECTED; +extern const char* INSERTING_HOOK; +extern const char* REMOVING_HOOK; +extern const char* HOOK_FAILED; +extern const char* TOO_MANY_HOOKS; +extern const char* NOT_ENOUGH_TEXT; +extern const char* FUNC_MISSING; +extern const char* MODULE_MISSING; +extern const char* GARBAGE_MEMORY; +extern const char* SEND_ERROR; +extern const char* READ_ERROR; +extern const char* HIJACK_ERROR; +extern const char* COULD_NOT_FIND; +extern const char* SELECT_LANGUAGE; +extern const char* BING_PROMPT; +extern const char* GOOGLE_PROMPT; +extern const wchar_t* TOO_MANY_TRANS_REQUESTS; +extern const wchar_t* TRANSLATION_ERROR; +extern const char* EXTRA_WINDOW_INFO; +extern const char* BG_COLOR; +extern const char* TEXT_COLOR; +extern const char* FONT_SIZE; +extern const char* TOPMOST; +extern const char* ALWAYS_ON_TOP; +extern const char* REGEX_FILTER; +extern const char* INVALID_REGEX; +extern const char* CURRENT_FILTER; +extern const wchar_t* REPLACER_INSTRUCTIONS; +extern const char* THREAD_LINKER; +extern const char* LINK; +extern const char* THREAD_LINK_FROM; +extern const char* THREAD_LINK_TO; diff --git a/text.cpp b/text.cpp new file mode 100644 index 0000000..1d61369 --- /dev/null +++ b/text.cpp @@ -0,0 +1,310 @@ +#include "text.h" + +//#define TURKISH +//#define SPANISH +//#define SIMPLIFIED_CHINESE + +const char* ATTACH = u8"Attach to game"; +const char* LAUNCH = u8"Launch game"; +const char* DETACH = u8"Detach from game"; +const char* ADD_HOOK = u8"Add hook"; +const char* SAVE_HOOKS = u8"Save hook(s)"; +const char* SETTINGS = u8"Settings"; +const char* EXTENSIONS = u8"Extensions"; +const char* SELECT_PROCESS = u8"Select Process"; +const char* ATTACH_INFO = u8R"(If you don't see the process you want to attach, try running with admin rights +You can also type in the process id)"; +const char* SEARCH_GAME = u8"Select from computer"; +const char* PROCESSES = u8"Processes (*.exe)"; +const char* CODE_INFODUMP = u8R"(Search for text +S[codepage#]text +OR +Enter read code +R{S|Q|V}[codepage#][*deref_offset]@addr +OR +Enter hook code +H{A|B|W|S|Q|V}[N][codepage#]data_offset[*deref_offset1][:split_offset[*deref_offset2]]@addr[:module[:func]] +All numbers except codepage in hexadecimal +Default codepage is 932 (Shift-JIS) but this can be changed in settings +A/B: codepage char little/big endian +W: UTF-16 char +S/Q/V: codepage/UTF-16/UTF-8 string +Negatives for data/split offset refer to registers +-4 for EAX, -8 for ECX, -C for EDX, -10 for EBX, -14 for ESP, -18 for EBP, -1C for ESI, -20 for EDI +* means dereference pointer+deref_offset)"; +const char* SAVE_SETTINGS = u8"Save settings"; +const char* EXTEN_WINDOW_INSTRUCTIONS = u8R"(Drag and drop extension (.dll) files here from your computer to add them +(Does not work if running as administrator) +Drag and drop within the list to reorder +Press delete with an extension selected to remove it)"; +const char* WINDOW = u8"Window"; +const char* USE_JP_LOCALE = u8"Emulate japanese locale?"; +const char* DEFAULT_CODEPAGE = u8"Default Codepage"; +const char* FLUSH_DELAY = u8"Flush Delay"; +const char* MAX_BUFFER_SIZE = u8"Max Buffer Size"; +const wchar_t* CONSOLE = L"Console"; +const wchar_t* CLIPBOARD = L"Clipboard"; +const wchar_t* ABOUT = L"Textractor v" CURRENT_VERSION LR"( made by me: Artikash (email: akashmozumdar@gmail.com) +Project homepage: https://github.com/Artikash/Textractor +Tutorial video: https://www.youtube.com/watch?v=eecEOacF6mw +Please contact me with any problems, feature requests, or questions relating to Textractor +You can do so via the project homepage (issues section) or via email +Source code available under GPLv3 at project homepage +I'm currently looking for a new job: email me if you know anyone hiring US software engineers)"; +const wchar_t* UPDATE_AVAILABLE = L"Update available: download it from https://github.com/Artikash/Textractor/releases"; +const wchar_t* ALREADY_INJECTED = L"Textractor: already injected"; +const wchar_t* ARCHITECTURE_MISMATCH = L"Textractor: architecture mismatch: try 32 bit Textractor instead"; +const wchar_t* INJECT_FAILED = L"Textractor: couldn't inject"; +const wchar_t* LAUNCH_FAILED = L"Textractor: couldn't launch"; +const wchar_t* INVALID_CODE = L"Textractor: invalid code"; +const wchar_t* INVALID_CODEPAGE = L"Textractor: couldn't convert text (invalid codepage?)"; +const char* PIPE_CONNECTED = u8"Textractor: pipe connected"; +const char* INSERTING_HOOK = u8"Textractor: inserting hook: %s"; +const char* REMOVING_HOOK = u8"Textractor: removing hook: %s"; +const char* HOOK_FAILED = u8"Textractor: failed to insert hook"; +const char* TOO_MANY_HOOKS = u8"Textractor: too many hooks: can't insert"; +const char* NOT_ENOUGH_TEXT = u8"Textractor: not enough text to search accurately"; +const char* FUNC_MISSING = u8"Textractor: function not present"; +const char* MODULE_MISSING = u8"Textractor: module not present"; +const char* GARBAGE_MEMORY = u8"Textractor: memory constantly changing, useless to read"; +const char* SEND_ERROR = u8"Textractor: Send ERROR (likely an incorrect H-code)"; +const char* READ_ERROR = u8"Textractor: Reader ERROR (likely an incorrect R-code)"; +const char* HIJACK_ERROR = u8"Textractor: Hijack ERROR"; +const char* COULD_NOT_FIND = u8"Textractor: could not find text"; +const char* SELECT_LANGUAGE = u8"Select Language"; +const char* BING_PROMPT = u8"What language should Bing translate to?"; +const char* GOOGLE_PROMPT = u8"What language should Google translate to?"; +const wchar_t* TOO_MANY_TRANS_REQUESTS = LR"( +Too many translation requests: refuse to make more)"; +const wchar_t* TRANSLATION_ERROR = L"Error while translating"; +const char* EXTRA_WINDOW_INFO = u8R"(Right click to change settings +Click and drag on window edges to move, or the bottom right corner to resize)"; +const char* BG_COLOR = u8"Background Color"; +const char* TEXT_COLOR = u8"Text Color"; +const char* FONT_SIZE = u8"Font Size"; +const char* TOPMOST = u8"Always on Top"; +const char* ALWAYS_ON_TOP = u8"Keep this window on top"; +const char* REGEX_FILTER = u8"Regex Filter"; +const char* INVALID_REGEX = u8"Invalid regex"; +const char* CURRENT_FILTER = u8"Currently filtering: "; +const wchar_t* REPLACER_INSTRUCTIONS = LR"(This file only does anything when the "Replacer" extension is used. +Replacement commands must be formatted like this: +|ORIG|original_text|BECOMES|replacement_text|END| +All text in this file outside of a replacement command is ignored. +Whitespace in original_text is ignored, but replacement_text can contain spaces, newlines, etc. +This file must be encoded in Unicode (UTF-16 little endian). +)"; +const char* THREAD_LINKER = u8"Thread Linker"; +const char* LINK = u8"Link"; +const char* THREAD_LINK_FROM = u8"Thread number to link from"; +const char* THREAD_LINK_TO = u8"Thread number to link to"; + +inline auto _ = [] +{ +#ifdef TURKISH + ATTACH = u8"Oyuna bağla"; + DETACH = u8"Oyundan kopar"; + ADD_HOOK = u8"Kanca ekle"; + SAVE_HOOKS = u8"Kancaları kaydet"; + SETTINGS = u8"Ayarlar"; + EXTENSIONS = u8"Uzantılar"; + SELECT_PROCESS = u8"İşlem Seçin"; + ATTACH_INFO = u8"Bağlanmak istediğiniz işlemi görmüyorsanız yönetici olarak çalıştırmayı deneyin"; + WINDOW = u8"Pencere"; + DEFAULT_CODEPAGE = u8"Varsayılan Kod Sayfası"; + FLUSH_DELAY = u8"Temizleme Gecikmesi"; + MAX_BUFFER_SIZE = u8"Maksimum Arabellek Boyu"; + ABOUT = L"Textractor v" CURRENT_VERSION LR"( (proje ana sayfası: https://github.com/Artikash/Textractor) +Benim tarafımdan yapıldı: Artikash (e-posta: akashmozumdar@gmail.com) +Textractor ile ilgili tüm sorunlarınız, istekleriniz ve sorularınız için lütfen benimle iletişime geçin +Benimle, proje ana sayfasından (“issues” kısmından) ya da e-posta aracılığıyla iletişime geçebilirsiniz +Kaynak kodu GKLv3 koruması altında proje ana sayfasında mevcut +Şu anda iş aramaktayım: Eğer ABD’li yazılım mühendislerini işe alıyorsanız lütfen bana e-posta atın)"; + UPDATE_AVAILABLE = L"Güncelleme mevcut: https://github.com/Artikash/Textractor/releases adresinden indirin"; + ALREADY_INJECTED = L"Textractor: Zaten enjekte edili"; + ARCHITECTURE_MISMATCH = L"Textractor: Mimari uyumsuzluğu: Lütfen Textractor’ın 32 bitlik sürümünü deneyin"; + INJECT_FAILED = L"Textractor: Enjekte edilemedi"; + INVALID_CODE = L"Textractor: Geçersiz kod"; + INVALID_CODEPAGE = L"Textractor: Metne dönüştürülemedi (geçersiz kod sayfası?)"; + PIPE_CONNECTED = u8"Textractor: Boru bağlandı"; + INSERTING_HOOK = u8"Textractor: Kanca ekleniyor: %s"; + REMOVING_HOOK = u8"Textractor: Kanca çıkarılıyor:: %s"; + HOOK_FAILED = u8"Textractor: Kanca eklenemedi"; + TOO_MANY_HOOKS = u8"Textractor: Çok fazla kanca var: Eklenemiyor"; + FUNC_MISSING = u8"Textractor: Fonksiyon mevcut değil"; + MODULE_MISSING = u8"Textractor: Modül mevcut değil"; + GARBAGE_MEMORY = u8"Textractor: Hafıza sürekli değişiyor, okumak boşa"; +#endif // TURKISH + +#ifdef SPANISH + ATTACH = u8"Adjuntar juego"; + LAUNCH = u8"Iniciar juego"; + DETACH = u8"Desconectar juego"; + ADD_HOOK = u8"Añadir hook"; + SAVE_HOOKS = u8"Guardar hook(s)"; + SETTINGS = u8"Opciones"; + EXTENSIONS = u8"Extensiones"; + SELECT_PROCESS = u8"Seleccionar procreso"; + ATTACH_INFO = u8R"(Si no ves el proceso que quieras adjuntar, ejecuta este programa como administrador +También puedes escribir la ID del proceso)"; + SEARCH_GAME = u8"Seleccionar desde computadora"; + PROCESSES = u8"Procesos (*.exe)"; + CODE_INFODUMP = u8R"(Buscar texto +S[codepage#]texto +O +Ingresar código de lectura +R{S|Q|V}[codepage#][*deref_offset]@addr +O +Ingresar hook code (H-code) +H{A|B|W|S|Q|V}[N][codepage#]data_offset[*deref_offset1][:split_offset[*deref_offset2]]@addr[:module[:func]] +Todos los números excepto codepage en hexedécimal +Codepage por defecto es 932 (Shift-JIS) pero se puede cambiar en opciones +A/B: codepage char little/big endian +W: UTF-16 char +S/Q/V: codepage/UTF-16/UTF-8 string +Negatives for data/split offset refer to registers +-4 for EAX, -8 for ECX, -C for EDX, -10 for EBX, -14 for ESP, -18 for EBP, -1C for ESI, -20 for EDI +* means dereference pointer+deref_offset)"; + SAVE_SETTINGS = u8"Guardar opciones"; + EXTEN_WINDOW_INSTRUCTIONS = u8R"(Arrrastra y suelta la extension (.dll) aquí desde tu computadora para añadirlos +Arrastra y suelta la lista para reordenar +Presiona supr en una extension seleccionada para removerla)"; + WINDOW = u8"Ventana"; + USE_JP_LOCALE = u8"¿Emular idioma japonés?"; + DEFAULT_CODEPAGE = u8"Default Codepage"; + FLUSH_DELAY = u8"Flush Delay"; + MAX_BUFFER_SIZE = u8"Max Buffer Size"; + CONSOLE = L"Consola"; + CLIPBOARD = L"Portapapeles"; + ABOUT = L"Textractor v" CURRENT_VERSION LR"( hecho por mí: Artikash (correo: akashmozumdar@gmail.com) +Página del proyecto: https://github.com/Artikash/Textractor +Video tutorial: https://www.youtube.com/watch?v=eecEOacF6mw +No dudes en conectarme si tienes algún problema, petición de característica o preguntas relacionadas con Textractor +Puedes hacerlo en la página del proyecto (en el apartado de "Issues") o por correo. Usa el inglés para comunicarte. +Código fuente disponible bajo GPLv3 en la página del proyecto +Estoy buscando un nuevo trabajo: por favor envíame un correo si estás contratando ingenieros de software de EE.UU.)"; + UPDATE_AVAILABLE = L"Actualización disponible: descárguela en https://github.com/Artikash/Textractor/releases"; + ALREADY_INJECTED = L"Textractor: ya inyectado"; + ARCHITECTURE_MISMATCH = L"Textractor: architecture mismatch: try 32 bit Textractor instead"; + INJECT_FAILED = L"Textractor: no se puede inyectar"; + LAUNCH_FAILED = L"Textractor: no se puede iniciar"; + INVALID_CODE = L"Textractor: código inválido"; + INVALID_CODEPAGE = L"Textractor: no se puede convertir texto (¿Codepage inválido?)"; + PIPE_CONNECTED = u8"Textractor: pipe connected"; + INSERTING_HOOK = u8"Textractor: insertando hook: %s"; + REMOVING_HOOK = u8"Textractor: removiendo hook: %s"; + HOOK_FAILED = u8"Textractor: no se puede insertar hook"; + TOO_MANY_HOOKS = u8"Textractor: demasiados hooks: no se puede insertar"; + NOT_ENOUGH_TEXT = u8"Textractor: no hay suficiente texto para buscar con precisión"; + FUNC_MISSING = u8"Textractor: función no presente"; + MODULE_MISSING = u8"Textractor: module not present"; + GARBAGE_MEMORY = u8"Textractor: memory constantly changing, useless to read"; + SEND_ERROR = u8"Textractor: Send ERROR (probablemente un H-code incorrecto)"; + READ_ERROR = u8"Textractor: Reader ERROR (probablemente un R-code incorrecto)"; + HIJACK_ERROR = u8"Textractor: Hijack ERROR"; + COULD_NOT_FIND = u8"Textractor: no se puede encontrar texto"; + SELECT_LANGUAGE = u8"Seleccionar lenguaje"; + BING_PROMPT = u8"¿A qué idioma debe traducir Bing?"; + GOOGLE_PROMPT = u8"¿A qué idioma debe traducir Google?"; + TOO_MANY_TRANS_REQUESTS = LR"( +Demasiadas peticiones de traducción: no se puede hacer más)"; + TRANSLATION_ERROR = L"Error al traducir"; + EXTRA_WINDOW_INFO = u8R"(Clic derecho para configurar +Clic y arrastra los bordes de la ventana para moverla, o en la esquina inferior derecha para cambiar el tamaño)"; + BG_COLOR = u8"Color de fondo"; + TEXT_COLOR = u8"Color de texto"; + FONT_SIZE = u8"Tamaño de letra"; + TOPMOST = u8"Siempre visible"; + ALWAYS_ON_TOP = u8"Matener esta ventana encima"; + REGEX_FILTER = u8"Filtro Regex"; + 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; +}();