From ca601399d0f8231e6ebd41d0acfc0082136bef58 Mon Sep 17 00:00:00 2001 From: ZGGSONG Date: Fri, 16 Dec 2022 18:46:52 +0800 Subject: [PATCH] feat: add config and prevent multiple software opening --- README.md | 16 ++++------------ STranslate/App.xaml.cs | 17 +++++++++++++++++ STranslate/STranslate.csproj | 7 +++++++ STranslate/STranslate.yml | 6 ++++++ STranslate/ViewModel/MainVM.cs | 3 ++- 5 files changed, 36 insertions(+), 13 deletions(-) create mode 100644 STranslate/STranslate.yml diff --git a/README.md b/README.md index 52385ed..6b2e4d9 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,9 @@ WPF 开发的一款即用即走的翻译工具 ## 功能 - [x] 添加 DeepL API -- [x] 添加百度翻译 API [申请教程(Bob)](https://bobtranslate.com/service/translate/baidu.html) +- [x] 添加百度翻译 API - [x] 实现基本翻译功能 +- [x] 多开 - [ ] 自动生成配置文件 - [ ] 优化 DeepL 服务并打包成库引入进项目 - [ ] 添加缓存功能 @@ -19,17 +20,8 @@ WPF 开发的一款即用即走的翻译工具 ## 使用 +首先在软件运行目录的 `STranslate.yml` 中添加自己的配置,这里推荐百度通用翻译 API 免费版 [申请教程(参照Bob WIKI)](https://bobtranslate.com/service/translate/baidu.html) + 打开软件后会静默在后台,等待调用,全局监听快捷键(日后升级成自定义)`Alt` + `A` 即可打开软件主界面,输入需要翻译的内容,选择目标语言,如果识别语种不正确则手动指定即可,翻译结束后选择复制或点击一键复制即可 点击软件外部界面任意处或点击ESC,软件则会自动隐藏到后台,即用即走。 - -> 当前不能生成配置文件,需要手动再 D 盘根目录创建一个名为 `STranslate.yml` 的配置文件,内容格式如下 - -```yml -service: baidu -baidu: - appid: - secretKey: -deepl: - url: -``` \ No newline at end of file diff --git a/STranslate/App.xaml.cs b/STranslate/App.xaml.cs index 7f94bd6..0be192d 100644 --- a/STranslate/App.xaml.cs +++ b/STranslate/App.xaml.cs @@ -13,5 +13,22 @@ namespace STranslate /// public partial class App : Application { + private static System.Threading.Mutex mutex; + //系统能够识别有名称的互斥,因此可以使用它禁止应用程序启动两次 + //第二个参数可以设置为产品的名称:Application.ProductName + // 每次启动应用程序,都会验证名称为OnlyRun的互斥是否存在 + protected override void OnStartup(StartupEventArgs e) + { + mutex = new System.Threading.Mutex(true, "STranslate"); + if (mutex.WaitOne(0, false)) + { + base.OnStartup(e); + } + else + { + MessageBox.Show("STranslate 已在运行...", "提示"); + this.Shutdown(); + } + } } } diff --git a/STranslate/STranslate.csproj b/STranslate/STranslate.csproj index b8e1ae3..b359cc5 100644 --- a/STranslate/STranslate.csproj +++ b/STranslate/STranslate.csproj @@ -16,6 +16,13 @@ + + + + + + PreserveNewest + diff --git a/STranslate/STranslate.yml b/STranslate/STranslate.yml new file mode 100644 index 0000000..fe786e6 --- /dev/null +++ b/STranslate/STranslate.yml @@ -0,0 +1,6 @@ +service: baidu +baidu: + appid: + secretKey: +deepl: + url: \ No newline at end of file diff --git a/STranslate/ViewModel/MainVM.cs b/STranslate/ViewModel/MainVM.cs index 0f6ef41..a58084a 100644 --- a/STranslate/ViewModel/MainVM.cs +++ b/STranslate/ViewModel/MainVM.cs @@ -12,7 +12,7 @@ namespace STranslate.ViewModel { public class MainVM : BaseVM { - private static readonly string ConfigPath = @"D:\STranslate.yml"; + private static string ConfigPath => $"{AppDomain.CurrentDomain.BaseDirectory}STranslate.yml"; public static ConfigModel config = new ConfigModel(); private static Dictionary LanguageEnumDict { get => TranslateUtil.GetEnumList(); } @@ -25,6 +25,7 @@ namespace STranslate.ViewModel OutputCombo = LanguageEnumDict.Keys.ToList(); OutputComboSelected = LanguageEnum.EN.GetDescription(); + //TODO: fix no config config = ConfigUtil.ReadConfig(ConfigPath); //手动复制翻译结果