From f82d9d42f31a6aa167ef679570a7357616142a58 Mon Sep 17 00:00:00 2001 From: lin <2920155761@qq.com> Date: Mon, 8 May 2023 19:00:51 +0800 Subject: [PATCH 1/8] =?UTF-8?q?1.=E4=BC=98=E5=8C=96=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E9=80=9F=E5=BA=A62.=E4=BF=AE=E6=94=B9=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E6=96=87=E6=9C=AC3.=E5=A2=9E=E5=8A=A0=E5=8E=BB=E5=90=8E?= =?UTF-8?q?=E7=BC=80=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChineseSubtitleConversionTool.csproj | 2 +- .../FormMain.Designer.cs | 2 +- ChineseSubtitleConversionTool/FormMain.cs | 81 ++++++++++++++----- ChineseSubtitleConversionTool/FormMain.resx | 46 +---------- ChineseSubtitleConversionTool/packages.config | 2 +- 5 files changed, 64 insertions(+), 69 deletions(-) diff --git a/ChineseSubtitleConversionTool/ChineseSubtitleConversionTool.csproj b/ChineseSubtitleConversionTool/ChineseSubtitleConversionTool.csproj index 4693b0d..8b4e4e1 100644 --- a/ChineseSubtitleConversionTool/ChineseSubtitleConversionTool.csproj +++ b/ChineseSubtitleConversionTool/ChineseSubtitleConversionTool.csproj @@ -36,7 +36,7 @@ - ..\packages\Microsoft.Office.Interop.Word.15.0.4797.1003\lib\net20\Microsoft.Office.Interop.Word.dll + ..\packages\Microsoft.Office.Interop.Word.15.0.4797.1004\lib\net20\Microsoft.Office.Interop.Word.dll True diff --git a/ChineseSubtitleConversionTool/FormMain.Designer.cs b/ChineseSubtitleConversionTool/FormMain.Designer.cs index e69f5fa..b79fcae 100644 --- a/ChineseSubtitleConversionTool/FormMain.Designer.cs +++ b/ChineseSubtitleConversionTool/FormMain.Designer.cs @@ -164,7 +164,7 @@ private void InitializeComponent() this.txtFileName.Name = "txtFileName"; this.txtFileName.Size = new System.Drawing.Size(174, 21); this.txtFileName.TabIndex = 1; - this.txtFileName.Text = "{name}.cs{exten}"; + this.txtFileName.Text = "{name}.sc{exten}"; this.txtFileName.TextChanged += new System.EventHandler(this.txtFileName_TextChanged); // // txtPath diff --git a/ChineseSubtitleConversionTool/FormMain.cs b/ChineseSubtitleConversionTool/FormMain.cs index 40dc535..2742dc6 100644 --- a/ChineseSubtitleConversionTool/FormMain.cs +++ b/ChineseSubtitleConversionTool/FormMain.cs @@ -19,10 +19,24 @@ public partial class FormMain : Form private string OpenFileDefineExt = ""; private string OpenFileDefineName = ""; private enumConvertOption ConvertOption; + private Task officeIsReadyTask; #region 初始化相关 public FormMain() { + this.officeIsReadyTask = Task.Factory.StartNew(() => + { + try + { + OfficeWordConvert owc = new OfficeWordConvert(); + owc.Dispose(); + return true; + } + catch (Exception) + { + return false; + } + }); InitializeComponent(); } @@ -40,20 +54,6 @@ private void FormMain_Load(object sender, EventArgs e) cbFormat.SelectedIndex = 0; cbEncode.SelectedIndex = 0; - try - { - OfficeWordConvert owc = new OfficeWordConvert(); - owc.Dispose(); - rbConvertHigh.Enabled = true; - rbConvertHigh.Checked = true; - } - catch (Exception err) - { - rbConvertOldWord.Checked = true; - rbConvertHigh.Enabled = false; - Console.WriteLine(err.Message); - } - TipObject = new ToolTip(); TipObject.AutoPopDelay = 10000; //工具提示保持可见的时间期限 TipObject.InitialDelay = 200; //鼠标放上,自动打开提示的时间 @@ -62,8 +62,19 @@ private void FormMain_Load(object sender, EventArgs e) TipObject.UseAnimation = true; //动画效果 TipObject.UseFading = true; //淡入淡出效果 TipObject.IsBalloon = true; //气球状外观 - TipObject.SetToolTip(this.txtFileName, "替换符说明:{name}原文件名称,{exten}文件扩展名,{num}文件序号"); + TipObject.SetToolTip(this.txtFileName, "替换符说明:{name}原文件名称,{exten}文件扩展名,{num}文件序号,{name}删除原文件名中最后出现的xxx"); TipObject.SetToolTip(this.rbConvertQuick, "选择后可较快的转换完成,全局有效!"); + this.officeIsReadyTask.Wait(); + if (this.officeIsReadyTask.Result) + { + rbConvertHigh.Enabled = true; + rbConvertHigh.Checked = true; + } + else + { + rbConvertOldWord.Checked = true; + rbConvertHigh.Enabled = false; + } TipObject.SetToolTip(this.rbConvertOldWord, "选择后可有效避免出现??异常文字,全局有效!"); TipObject.SetToolTip(this.rbConvertHigh, "选择后会结合上下文语义转换速度慢,全局有效!"); } @@ -334,16 +345,16 @@ private void listViewFile_ColumnClick(object sender, ColumnClickEventArgs e) private void cbFormat_SelectionChangeCommitted(object sender, EventArgs e) { string strFileStyle = txtFileName.Text.Trim(); - if (strFileStyle == "{name}.cs{exten}" || strFileStyle == "{name}.ct{exten}") + if (strFileStyle == "{name}.sc{exten}" || strFileStyle == "{name}.tc{exten}") { ComboBox comboBox = (ComboBox)sender; if (comboBox.SelectedIndex == 0) { - strFileStyle = "{name}.cs{exten}"; + strFileStyle = "{name}.sc{exten}"; } else if (comboBox.SelectedIndex == 1) { - strFileStyle = "{name}.ct{exten}"; + strFileStyle = "{name}.tc{exten}"; } txtFileName.Text = strFileStyle; } @@ -519,6 +530,17 @@ private void LoadDirectoryFile(string path, ListView listView) /// private void UpdataListViewFileName(ListView listView, string nameStyle) { + String exclude = null; + int startIndex = nameStyle.IndexOf("{name}<"); + if (startIndex != -1) + { + int endIndex = nameStyle.IndexOf(">", startIndex + 7); + if (endIndex != -1) + { + exclude = nameStyle.Substring(startIndex + 7, endIndex - startIndex - 7); + nameStyle = nameStyle.Substring(0, startIndex + 6) + nameStyle.Substring(endIndex + 1); + } + } if (CheckFileStyle(nameStyle, out string msg)) { listView.BeginUpdate(); @@ -527,7 +549,7 @@ private void UpdataListViewFileName(ListView listView, string nameStyle) string filePath = item.SubItems[2].Text; if (File.Exists(filePath)) { - item.SubItems[1].Text = Path.GetFileName(MakeFileName(filePath, nameStyle, Convert.ToInt32(item.Text).ToString().PadLeft(listView.Items.Count.ToString().Length, '0'))); + item.SubItems[1].Text = Path.GetFileName(MakeFileName(filePath, nameStyle, exclude, Convert.ToInt32(item.Text).ToString().PadLeft(listView.Items.Count.ToString().Length, '0'))); } } listView.EndUpdate(); @@ -694,10 +716,19 @@ private void ChangeProcessBarValue(object sender, double percentage) /// 返回是否合法 public bool CheckFileStyle(string fileStyle, out string msg) { + int startIndex = fileStyle.IndexOf("{name}<"); + if (startIndex != -1) + { + int endIndex = fileStyle.IndexOf(">", startIndex+7); + if (endIndex != -1) + { + fileStyle = fileStyle.Substring(0, startIndex+6) + fileStyle.Substring(endIndex + 1); + } + } msg = ""; if (fileStyle.IndexOf("{name}") == -1 && fileStyle.IndexOf("{num}") == -1) { - msg = "文件名中必须包含{name},请检查后修改再试。"; + msg = "文件名中必须包含{name}或{num},请检查后修改再试。"; return false; } if (fileStyle.IndexOf("{exten}") == -1) @@ -719,11 +750,19 @@ public bool CheckFileStyle(string fileStyle, out string msg) /// 源名称 /// 目标名称样式 /// - public string MakeFileName(string sourceName, string styleName, string num = "") + public string MakeFileName(string sourceName, string styleName,String exclude, string num = "") { string path = Path.GetDirectoryName(sourceName) + "\\"; string fileName = Path.GetFileNameWithoutExtension(sourceName); string fileExt = Path.GetExtension(sourceName); + if (exclude != null) + { + int lastIndex = fileName.LastIndexOf(exclude); + if (lastIndex != -1) + { + fileName = fileName.Substring(0, lastIndex) + fileName.Substring(lastIndex + exclude.Length); ; + } + } return path + styleName.Replace("{name}", fileName).Replace("{exten}", fileExt).Replace("{num}", num); } diff --git a/ChineseSubtitleConversionTool/FormMain.resx b/ChineseSubtitleConversionTool/FormMain.resx index 3ed6152..dd202f7 100644 --- a/ChineseSubtitleConversionTool/FormMain.resx +++ b/ChineseSubtitleConversionTool/FormMain.resx @@ -118,50 +118,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 普通转换 -可以直接将字幕文件拖拽到软件中,自动读取字幕文件内容,点击“转为简体”或“转为繁体”完成转换,点击“保存”按钮可以输出保存。 - -批量转换 -可以直接将含有字幕的文件夹拖拽到软件中,选择转换的格式,填写输出的文件名样式,点击“开始转换”即可完成转换。 - -批量转换使用多线程技术,转换过程UI不卡顿,其他功能可正常同步使用,方便并快捷。 - -需要注意当目标“文件名”与源文件或已存在文件同名时会覆盖掉已有文件,请注意备份源字幕文件。 - -批量转换将自动获取该目录下的全部字幕文件(包括ASS、SSA、SRT、LRC、TXT),其他格式文件不会读取。 - -文件名样式说明 -批量转换使用的是文件名样式替换掉替换符,替换符使用{}包裹,已有替换符如下: - -{name} 源文件名称(不包含路径与扩展名) - -{exten} 源文件扩展名,必须存在的替换符 - -{num} 文件序号,将列表中的序号使用在文件名中 - -文件名样式中除替换符以外的字符将原样输出,需要注意所有字符必须符合文件名规范,且不能存在重复的文件名,否则将出现保存异常。 - -如果要使用源文件名替换掉旧的字幕文件可输入:{name}{exten} - -如果文件名样式格式存在问题,文件名样式文本框背景为红色,且不可进行转换。 - -转换选项 -此配置全局有效,针对普通转换与批量转换输出结果;启用不同转换选项输出的效果略有不同,可根据需要进行选择。 - -快速转换 -采用常用模板算法,快速输出转换结果,无语义转换功能,适合大量简单的语句转换。 - -优化古文字转换 -在快速转换的基础上优化古文字显示,主要应用场景是在含有古文字字符的文本中,转换速度仅次于快速转换。 - -默认勾选该选项,该模式下与快速转换效率相差无几,有效避免快速转换结果出现??的BUG。 - -当不勾选该选项时,文本中包含的古文字有可能会被转换成??。 - -高精度转换 -采用Office组件实现的繁简转换功能,可根据语义输出转换结果,转换速度较慢,适合需要明确语义的使用场景。 - -使用此选项必须已安装Office组件,否则此选项不可用。 - + \ No newline at end of file diff --git a/ChineseSubtitleConversionTool/packages.config b/ChineseSubtitleConversionTool/packages.config index 768c84c..5e6d4cb 100644 --- a/ChineseSubtitleConversionTool/packages.config +++ b/ChineseSubtitleConversionTool/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file From c5ead9d44948e849298dde68385a993570588384 Mon Sep 17 00:00:00 2001 From: lin <2920155761@qq.com> Date: Mon, 8 May 2023 20:15:35 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E9=85=8D=E7=BD=AE=EF=BC=8C=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E7=AA=97=E5=8F=A3=E4=BF=9D=E5=AD=98=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChineseSubtitleConversionTool.csproj | 1 + .../FormMain.Designer.cs | 17 ++++++-- ChineseSubtitleConversionTool/FormMain.cs | 41 ++++++++---------- ChineseSubtitleConversionTool/FormMain.resx | 3 -- .../Debug/ChineseSubtitleConversionTool.exe | Bin 99328 -> 99328 bytes 5 files changed, 32 insertions(+), 30 deletions(-) diff --git a/ChineseSubtitleConversionTool/ChineseSubtitleConversionTool.csproj b/ChineseSubtitleConversionTool/ChineseSubtitleConversionTool.csproj index 0b2396f..acf91bd 100644 --- a/ChineseSubtitleConversionTool/ChineseSubtitleConversionTool.csproj +++ b/ChineseSubtitleConversionTool/ChineseSubtitleConversionTool.csproj @@ -68,6 +68,7 @@ FormMain.cs + Designer ResXFileCodeGenerator diff --git a/ChineseSubtitleConversionTool/FormMain.Designer.cs b/ChineseSubtitleConversionTool/FormMain.Designer.cs index 4c4c776..ffdf62b 100644 --- a/ChineseSubtitleConversionTool/FormMain.Designer.cs +++ b/ChineseSubtitleConversionTool/FormMain.Designer.cs @@ -28,7 +28,6 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain)); this.txtShow = new System.Windows.Forms.TextBox(); this.btnToSimplified = new System.Windows.Forms.Button(); this.btnToTraditional = new System.Windows.Forms.Button(); @@ -58,6 +57,7 @@ private void InitializeComponent() this.rbConvertQuick = new System.Windows.Forms.RadioButton(); this.label6 = new System.Windows.Forms.Label(); this.groupConvertOption = new System.Windows.Forms.GroupBox(); + this.btnSaveProfile = new System.Windows.Forms.Button(); this.tabControlMain.SuspendLayout(); this.tabPageCommon.SuspendLayout(); this.tabPageBatch.SuspendLayout(); @@ -76,7 +76,6 @@ private void InitializeComponent() this.txtShow.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.txtShow.Size = new System.Drawing.Size(555, 246); this.txtShow.TabIndex = 0; - this.txtShow.Text = resources.GetString("txtShow.Text"); // // btnToSimplified // @@ -400,6 +399,7 @@ private void InitializeComponent() // this.groupConvertOption.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.groupConvertOption.Controls.Add(this.btnSaveProfile); this.groupConvertOption.Controls.Add(this.rbConvertHigh); this.groupConvertOption.Controls.Add(this.rbConvertOldWord); this.groupConvertOption.Controls.Add(this.rbConvertQuick); @@ -410,6 +410,17 @@ private void InitializeComponent() this.groupConvertOption.TabIndex = 5; this.groupConvertOption.TabStop = false; // + // btnSaveProfile + // + this.btnSaveProfile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnSaveProfile.Location = new System.Drawing.Point(490, 12); + this.btnSaveProfile.Name = "btnSaveProfile"; + this.btnSaveProfile.Size = new System.Drawing.Size(75, 23); + this.btnSaveProfile.TabIndex = 5; + this.btnSaveProfile.Text = "保存配置"; + this.btnSaveProfile.UseVisualStyleBackColor = true; + this.btnSaveProfile.Click += new System.EventHandler(this.btnSaveProfile_Click); + // // FormMain // this.AllowDrop = true; @@ -422,7 +433,6 @@ private void InitializeComponent() this.Name = "FormMain"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "繁体简体字幕转换工具"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormMain_FormClosing); this.Load += new System.EventHandler(this.FormMain_Load); this.DragDrop += new System.Windows.Forms.DragEventHandler(this.FormMain_DragDrop); this.DragEnter += new System.Windows.Forms.DragEventHandler(this.FormMain_DragEnter); @@ -468,6 +478,7 @@ private void InitializeComponent() private System.Windows.Forms.GroupBox groupConvertOption; private System.Windows.Forms.Button btnCopy; private System.Windows.Forms.ProgressBar progressBarPercentage; + private System.Windows.Forms.Button btnSaveProfile; } } diff --git a/ChineseSubtitleConversionTool/FormMain.cs b/ChineseSubtitleConversionTool/FormMain.cs index 43adde8..31ab6c2 100644 --- a/ChineseSubtitleConversionTool/FormMain.cs +++ b/ChineseSubtitleConversionTool/FormMain.cs @@ -38,7 +38,6 @@ public FormMain() return false; } }); - Global.Init(); InitializeComponent(); Config = MainConfig.Load(); } @@ -132,28 +131,6 @@ private void FormMain_Load(object sender, EventArgs e) TipObject.SetToolTip(this.rbConvertHigh, "选择后会结合上下文语义转换速度慢,全局有效!"); } - /// - /// 关闭窗体保存配置 - /// - /// - /// - private void FormMain_FormClosing(object sender, FormClosingEventArgs e) - { - this.Hide(); - try - { - Config.ControlTabIndex = tabControlMain.SelectedIndex; - Config.FormatIndex = cbFormat.SelectedIndex; - Config.EncodeIndex = cbEncode.SelectedIndex; - Config.FileName = txtFileName.Text; - MainConfig.Save(Config); - } - catch (Exception err) - { - Console.WriteLine(err.Message); - } - } - /// /// 初始化列表 /// @@ -957,9 +934,25 @@ public bool SaveFile(string path, string text, string encode = "UTF-8") } } - #endregion + #endregion + private void btnSaveProfile_Click(object sender, EventArgs e) + { + Global.Init(); + try + { + Config.ControlTabIndex = tabControlMain.SelectedIndex; + Config.FormatIndex = cbFormat.SelectedIndex; + Config.EncodeIndex = cbEncode.SelectedIndex; + Config.FileName = txtFileName.Text; + MainConfig.Save(Config); + } + catch (Exception err) + { + MessageBox.Show(err.Message, "保存失败", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } } /// diff --git a/ChineseSubtitleConversionTool/FormMain.resx b/ChineseSubtitleConversionTool/FormMain.resx index dd202f7..1af7de1 100644 --- a/ChineseSubtitleConversionTool/FormMain.resx +++ b/ChineseSubtitleConversionTool/FormMain.resx @@ -117,7 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - \ No newline at end of file diff --git a/ChineseSubtitleConversionTool/bin/Debug/ChineseSubtitleConversionTool.exe b/ChineseSubtitleConversionTool/bin/Debug/ChineseSubtitleConversionTool.exe index 163a8f8622c6f16cfe9adc67bdb96506ed1e6add..50c11e63ee3f33229809542a69e3f0816cfabf7e 100644 GIT binary patch delta 23037 zcmcJ134B!b_3ydM+*y)LW=UqUOfnN7VIT>z$SNukQ4tZ6uth~dM2(^sCt$@G?gZ3I zMJt^O#ihzt_3u(C`jonXsKvG7PEi!83$+z+EzgSYd(NGiOalEcpZ8ug=br6%&iS3+ z`7L)L$s3I14aO}u=*M66zUj(CDMjh)_`F%65vv-8D|M+BrLW>jbt+cP z$5RyIpVRQGl7rqmkLd2Nh?si@k#SX%Lh}`F)qm4uwMbDeO3l@V95rl7t-v4R72x`y5Jk7h#2 zLt5B8A$>hjt|jJ}G~FOq6FxnOlh2^}(a|L){CR3Ln|C_%E(mqwO#v@fhk&}VOU#qe zZdUZLIgV}i4-QmmAY#yo{D}V)Fc+T+U?MLbk5T6%J*E*Q&GD>GwI0$#X&h}edJqmA zJ=%uN(^JPe2Uru(B#vBq%zAFzHW4tNjDk>5udQ|a_1l6D@;l;Zf*myc?91hMv`yj$ zleq!R>fsqd-LJcEZXNuZ%WMQUbXW~K{m#0vq_&rG%9~ifne|nh<1(j!iWgfl05(r; z_p@$4)|IfrEF>DS9iUskr$S{xE9xL*PGjv_fS}9ovcq)y-E{-tImC^oLlio!1U-IF zT?kA!m?|`*u#GMkNf&Bc!I{BE^89&q=cF2)MV8+sLD*?Q)PZiX*%8O#0`>Eshuz_YS;lH2MDYKRiLXyy}9>92TqJfQoYo8+JDvZ;kO?$Depc!|cVu)G{N>0K z=b~`qy}-tL$w8zxS6%iNe%RbV>S~$ITh!?B?ba6<1y(- zd`9XbPcJFP|9)nrw$FztRH46(D~Yp;TGq+X79gui2dY`m2|FC0$=XIc^Apb^I(v9+ zMkwXV>ucqdsy*hJWbtyqQ#FqR*UfWb35AvKsxxRr7<_F(1TH;>%ywHY^VmEOnnj0| z0(V^$HOK2ijx@YHfmY@$j*F$}My^;IZ(x-?Cr`4vsv}K=a!u6!mp*LgM+73C+K%Bg znzK0?!$fX96bd?O;~+RMeup_nE|~E~z=&S}!ko)mSR=r5_#L*Qc_EmGbzTJOx5@f- zCB`XVhP=lt_ZW$nxJ)iWi~0g%NaDK;RjY(iT_+>4CFp;?%e)vWNI4SeA!+2H+A!Fu z5A*A-0yeHK#Eeutsv)aLK#5nNI~bzgWW-z1+PnlHGhuC|I0^;RvepZgOS3A}zZ}Co zOeONdZrc**aB*SD!*uJh7UW@Oc#)T!rKxllw?kAg^yoJ=QnBo|rL_XQ9uYg(GIOo^3B2 zM;Z-T#7il0G1L+_chemT-L|EygJCl|uwLoZHV^)TF7!Dal7%E*#yofJXusRM9O#0+ z$a&C1ewW{4nqY*@`GDpX0BKH17so^~bG^9DHX!v+><;F$;t=LS+s~nu?=qaX zb({q@x!U<+qR>1h#=ygqy}+Hg4I^Yv4Qr%3u|7-Hxf2g%iKsjAc$Nsb6VGM|#|XH= zk0#SMj&iPb9X4)&YfgeEu7QCKe)st`5|C{1wyw-zOlfDpX;1T!GSB^njIeACChT}> z(wubs%Q$}F+h!pBMd}A%dFzc3P=5u=T35wj6k#syoe_fW(XK^iugi7fnEZ1KhUAqbFWLx6PYVmcLB-W$HG6)Vc-g9zEoY z%rF^6M#D4A6>Q^I06t_x)dQ+bA)Xc^cW`i8dZf~6kXm<+_yq^)%qe#lR}>d}PH6{m z^01E}eA;NSGAj0bQ2lP*K%*1~@N0lzULa3$o0IV@&x}GNI?%k8wNZ0Md?he*6@VQI z&z@12{PfdLm_SZ@0_FSjF@f^a6G&6d8&jJDQ7gy^3VCYHbQu`3h)eK#*SyR#!ZY$~ z2b0r|#&uLBDMhTm28D4x97Qg)api=MB_9h>{T~U&Jccb$%?nd4!Kkl@!=N@)h%BY& zq$U@|$}xVS_;1japkw!ZEe_HEcA*jOI6Jj1*xQZOPIsz@jYw*La9o5-hNsm7NCC=# z&7rQu+_^AU9qO`#!Od8jnYyv4w;Kyb+R|f1a2H>f^*szDX zKGmmq>~KtNrRcCG`)?sR7ci}x1EGo5hP{s6vb)%@M}b#joRP6={IK*4H2J9lUa3R$=Y~bi+v<-rt`0W5S{b7zz8Smg)!a-@7npQ$(HNS*PzN`4KVsC*F z(n3bMvNeoDy0B9Xq2fZ=^%M{BX^AiGDKR(HTe&&4EL3jX0f~8M>OVpQtWxnHXaB^# zXJVP*N#W7rzr`g_i{FJyz60IHaE~IV!@L^|PJtbPY&ccq4Ec4LTu#64kebZ|!dB1^ zLr;8!Ae`nJFcKr+$7Q1y$L7_A5Z6JYmiz{CP>$Oj^nl9j0MA52EDBd*w%Sp3;66wP z&VhDdf!4LQwc@R99WME`h2(OY>w%gZ0BXo-{tj2kTK!*L_RWI6J2uc+=X9p$irnOw z_dqRZlP6??nMxw$cqWqyY3MLOi1WDd(^BT%qYZezgkQa;&nPrDp~sG;3*Ltrn^PMX(7 zrJ26tN_uKTY1EPq@Gv}%CeRNKbkO~n*YcybZ3ef)4P~|MkBoY{(7Y}*zY8r8^arl^&{vE&1NlG|Z%%b*A(gJN+2`V=c*b_0EyQOrf4&oEjos6^SP zO97J(3c`&Dx`lNyQNTr%mZyUgnf8qG%%B(`pklaO(5>7q+J(lt&?-SC_FjTM%euV< z70)${+BdJ;Ai~gc+$L~~367Bo#<^7*kEdCj{%E23oUOoAB-*>}d64D{UA&O_r!FFF zZto%zkD(0B7rPiG=1UpE!gGdNEUdBbFyL)3gKfT&k?~RORh!^pk3_opWLDx&IhL6b zoe&Lov%<`9u9d`R+@wBZ7XHKLYZ(ezI&7eWM%$mkGGDj(Txikh-Mup}aWKcbDE0Kt z%&d255}e%Sof%fvJ5%tEfV+F=+K#$2*=H*D6ZW+3;V?TaCm-og~L?rPe+8q?8K0qaHLhwaF~hyziMY$+KkHyhZ))IFoAH8 zr0(JH9FJs@!$gU>!?wpn*nFdlFy91TauepiQXP^qSX&*o5w|9tF{vFDcL$@ zB5c0bC5inFy@`3URcEEwRaQ*w&vDF*=)`D#w|+A-yHZM%A9MQ6TUgdJ6IstpROEO~ zI|bX)6M2nYiwP@6`}Oe3%&b=?5~bXv-tHCemRUzkR7CT-<&=4esvIZG$T+dGy8v^u zUZl-2IbL`p?%J7{k`s4&d)sM;lEapbE{9#-eHCTR#BkUTWtLHKkY8#?{+HCsUcIcB zVKuWyu{b;7WlLQRsoKs*0W<9Pt^4od;I0~EB@mzLU zG-UT?mz^CBFEKS|9GFqs_CELWgD#cWaNeY&3R&HEY1R&zySo$I)N33$p zPTZ5@Ra%Yev3)W#Y-LtmY4cc4XGNSjOE7`e2Ae>3nUhscD$p(xJ`QF^CWl>mbhaF~ zQBqw8HronsGe@z)%j{9uycryY&1>UP*t~-EWLqe2USoRl!RFKJQP_NvJqnvA^HJEm zk{pH2XJBDl>GNvOI_3-}p2`_QW^}J(=49)*dl|DRoGD{5^={6{+ETlWt#%%_u8LwR z_URE7#q7kMoN%O7&uyHUkxW5JlOJ;2G9$ZhGJ%3Bw0c$)*GtzL$W+Mu*sgsM_3Lp~ zXJ*3D)U~=ZBj)1ijcMFHEi5X_#K%O)wDxw{Mm(r9qwTL?nV;BvuG8#x!$kH##zgi& zCguDlnv`b_Wc>OE2eL#Ip{=bhNz}`=G;y3<%Mz#Z)qD&6=i3x+A6tufk36ffC@~${ znMIr#(UW?d)tH%Gx|u*{Fb&eP^=;b=S9Eq4W1=Ez_3yTgF*DJch$Xp~*|Wiv%sm&&5_q+g?Itsh@XXAtXK8X%j%S`#d=^bv z{kosISdh3i$GB)tz}}I&{V}sVQyx(e*}$2IA&C?%?3OO(C+^F!%Z%u8QD5837E+#B z+nJlKJ8APgxB1i_6=A%X(+y^1Ckhi7OROX5vHZ+#6%(cRx`^mC-GZ~!c2-I3$cc^_ z(PoY=CpczigOes-=L9E=?{k7C`b%8TEG?R^}yYb7Esgw4uj|k(t>k zCrw7?gktfN2fhKYM@XJStOl;O*Fccj5^~r)&_`i&ijTtPz8!_lVc2Z+pN*Htj#qlz z{4qN*E~j_Qh#jY*x@)>shP2Pj2PQ)1=XP(n3tf8#Q?b9n4HEP`SJn#vys@z$acPbx zY1ebtU}kpONt0zcd1OYm-k89MB9?B)kg&N=;zIAYi~$(a(DpYAocI^Q4#)p4*Vt+3 zW2}|)!4n|<58=k`QITWy&Rh=nIGy6yH)teZq1XxfQuGoj#2L4rP=w?AZQh1-?0m36 zsE$mi@dF|U%f+mNpyFR;Sk5f#YhlT=t&sVRP1uLh9K!t87Vt)%)nXzeK&10wEH9?;02z;=3(}l_N;ACVQ>huAP{`PjNX>nT5X!tnz(b5Yey=i+L&&@^ z_;`1~eqn&u(@t0VIW+CgFCcgP5G$tsbWDX+E6<-bdH!6*K3+$@l=%OKf+sAyah{QQ z0;3Y`WBveUzB9D=U%0MysZR4pAT_nr|DkAE{4nsu%RHpN0+!@nN!JqYDH$G?8NL5W zYWycCpevz{0dyHSi7ZE#4-qC3ZbNW3VM#h|}j7u*Q)tXkZG?CA&!1H_lX_GJiPTK7meh`qexxMDUF}NVmnhPF~S{>Uu_=_i3eZL;GGwG z&&g5q)oX^QW)3c|=&7M~)3|kT?~s(HZ3J&<Hm0B~TGVixM@NU>MH>6$~GNF7ugw;WQe5 zNE0Rg)8Qa=)BnuSv8l;JUH#%bCZXkRh@o3|>~7fau!^t{3{7`OJ;?Zsjy z@0!|*Aif$2R&Z;irXCy~Y~m@x-`HUC5LP3-E~ek>MAgzrU^6dKMh=O!?#*?bTot%oW+^;*T-k8#1wZw}i0X-0q0sX(mecFlJIiH(l7@LsLtV}+ zQvx+YmxN5bFZa|q4Ke6bjI2eBkbwkTHnQeSS-tz$WR?J4cT^gQu(5t(5gUQ}#K&kD z(_WNVhp=DI<8kH<#l+Vtp0)~rJZF;ipq<(?GI$x5T(pD@-BU|O|6ZgfnZS2l3V#hp zSc@Sam6faUN*JO3)7oZmZQ((bXF)!^Bw3~ZfVPF;CQo9#S31o8c!pDd8^u5Yd4 zrLbUsV<}pAAAdDCUGL+qnw#Ie^lE^jJv6}a|mL>{<_qr*=6SBo>j=zmFI2t zXP-Ij%;%mhW8xO(3O0_TWdN&;zpW#kfeG-G$pF?+WPo8d1LHxc?WYN3JSPKXoPjP0 zGO#!&1NhYIKg)nPNoRmVXcyyd@gp=F&SW5~ptfgGd9NAHWFX7VX22Q~KY9jGn}kK& zPjYgNSJ|U*hIq!T#JAs}8a|$OW;#>t>0rK*{>6S+?WnGv>+Xtva}dckl` z2D%1<-+R~M(2PwSD}mZRh1<@MFVNKXX&~CMPU!Lhn=Q+}1g2c{N)z?CrY-e>3ihmcHLlAy zV7ZOg09#vKmS|w*cwbP7Q-Nkb+U@QIuUoU9-*t7W5OJIMP=^b@i;KCG`^{FaD8Ql? z-aT?^nKQ`WFk&c?!E4Z4J>CyS?axsfxf9n|!tKvoY!G}xgcaR(id_TGji6?T%>HWQ z2nBw9ET1f4k)DruyV~>k;5*Cij2<*TH^>PL_Y&P2G;+wLJ($=!b@?nB-#=geKX%x| zpLG<6JY#di%yF2@=I*8G=|HRNV>qmEXKi@cxHdaA@;g|=m7W^e8vli6S|+ld^Ld+U zf1xhPNE484Y#EzmNO4-U#J1+*y<`-n<~udig~- z6%x%FOLWdu@TNA?lfRK~N2&LzQ^#X7p;th^mD<|Sw;$#*^<{1R{tCYs5o{DVMqxsg z;K~QsV*HLw`A-^Y&A>5_e+)XKKrJ=sD}hG-GbM$zh6|X^&%e3|?F$(05qziM9RgPh zyhZqD=I<>r=)OFL&k5)L{5gdN6-M?43@Qok4|wQ@z)NKwIzRMMnL&S4ms(|Bx-Hxf zf-j>i_^6oS`-1lt)hh%pax%YA_%EZehjxkPC*T-#P8pjXTgLcS^-kTuzx_C0_fVs7 z`f1GhMTu7Kp^stBptx&)U=^)KHY|glFW~4l6f>-rW-CPLC*b&!F?>&@hh8mYmm2{M zI;-%WN`qDhSbB3F=WK(zKj0JO>KaMcqdvylg_Bp(5yKFaR6z5Oa2%lCCEV%};9hzoZ%NpoePVQc zxEBKQgj_{lIx(*w!Wx>-@OPfC@nzY(0v?)U1ul}ovL2Jss*q8PxH!5?g<}=6d##e; z7yhN__v5jp$ia(2&csbJD5{(B2!^1I{#?Xs_$M+nFGQICRXM{81kMLEXpxU|w#s$B z-bRl@-=JYuj2-+V#-sJLhZ}5{F@8u)gruOBG4s$)gYkZn-aSZrh^{SJTX+}! z7Uu4vH?W%+6hbb`sKWJ3$e;(L8iLyXKqU<>dt9%iU6qgPkI`}o_xmDiAV&91DWagH zIzP;zY?1MPRK|OTlcR1aXTE}h3el|p-z)UL{il@ShU%QCT5V18I=R9u=EI zX$&RNZfk&LBk*tVxZSf}o5BeSR6ncq$x;^LfCJT0WuWjZWIC!ITj(!1t&9V;fV3(ft;Vj=KqoPUE_u<<20EF3Ce-uLZlF_WkxNAy%&YhccUfNsY;Q`Zs{10Ts%RtZr1OqmuD^-3%)W?*wPJe+}Sm z<@W+sMIQiM@0sNtY@hLur2{-Fs>3hJ!WtjFjpe1m-%J`_@ zlYq|@Zvi||$gsop9N<%;bAQEl;1!i@XttA0zbpI#-z&fsC&QQg40j9v+Tz!Nx5ili zRwuW;!}V~ZVf;*gtI?X4JTdTY-txKHD`i<``5YI*!W=!`+1H0MpTyfyXYl8rP=Nbms6xjt$ z+d(dVzwY|l&jiV2il6h&$8|b5`bc0YU=p4@pR+C1vs#x{;$aC4K37Nn^gLd{Jc8dzh?zVMA}%BNqasbT(c zO)z8-a zr(;}Ggl6=&sY#$J>ESeW4%)@YS8vN=koBU|($x2rbDH{ClpJ6Sf8n~UsfM0RQ;XdT zn&Q-Fpe@_!Zg1*O&k1!sUF2BOR7cD4poLFw-}{#|4WKE5ZEC-BS<^sr4YAwx@!rxj zn8pZoJw4@G*>o)RIo8%}ao^cAjI8I<-I*tb7 zE}CTvTpOECpaVj6l7b#K&>gtBC3=qj?kT3R^p;SaN8MNsRH+*JcK5wX%q(q|DCkW_e0ZknqmvZ{S4Y7)N}Ny*TB|t zAl>l9$cCmF^geDR+02Dy8=6{Zd$Udb-Gjq0#iuaUNvA^dEP66cT@KB&Y4TKC_LAp& z{Hxw|Oj)#oCI(9!Gii$mSJIPSYMx1>@w9;Z`-<0SK9BBAQ@{7-HP50xxCdp~es59p z9J(b8oHBr`Hc zJi^o;ySna3(hE6hNz&^=EyXD$tR~5a=LeZ_NK!eLD^QNpO?)H+jGD|XbcUpC!sJ@G* z5?w|=5^5>U5Tgt6fT2saSg576R=KJ0e$JltdZka{fQ#*8i0=4p*hieH`>+KsDU~oBxh0(0dF9Lkf+R0s424d#_M6 zjN-9X7VqB59^$8@0^Sh&Z|JEfr+89ZrWpKd?Ux>Il;(^p)Wy+gByMps92;j%l_I#s z7Dq9zI)6-|Xr4a?KA=W*9)C=y5iSy`0_nXWKl0@-_9I_Um-&&MWVuK!vc)GZ5J~HhLYzT`LJ_*3abT@G zNCnuU3TQNLQfJ}!GzwCS;--i2dd&}LP${5?`T_cI+skmIzy^Wi1vUz75jY#Lm|6wD zLf|5SjS5>^W69+pU>O|}yi@kxDwV~JfK}8Y_#(i*v3{?AXEk0_KU8M{R}1F?4lln1@SzeDo3O=hcBl`;7UC~2JXErTcB-FL z-axGi?^k=&M}zlb(dj5$j|N-I9{~T!N+0dOrz8sPQyI1@4?2ozGeWo9ZbA-k1!py^ z;rSRjV+!DR&|FO=g8!kMr5^_w)>(yod9|3~d7&q15B&wtYxYn@q!`d!#_%iGbAVq~ zz6|(b*&C#2isL=N7Xy3Att~}ixfM(QlB%>s=o>242333y&S&NS0)B&Du54Am3#_L> z+IDvzyjte4Mrs?%2P>rr+VW9^6vuD~Zm*aQ2ltd6uQX^JM1?a(b=kMRp%?SwLZ~{l};_+bEUFOJ6wL9Ql-ocPDgN_!c~e}3l!e2?4f<( zy8(lEYS@6#?@?B3$g4#oC8Z4-yWgsQA3I;!r?Q(h+Sz$eE3L|`lIN5)n#1w5(nn%% z&{mfGOBtk8SFBP-DjUmG^*)$$sT(yOvOefcp*l$UZDm+(Q21=NkIL|Hw~ushALZj6 ze5=ynG-#t#o3&Bdfa7`}T3J%A)=_oEF@W6oAT4u*)mDXjz~$4R?xDjlw^>^py2+5ch^1e*n(#$j9m+?Lv&-MvV(_r}jZ5X|2j_Wi{GC$ww=8#KGDi zt)cv6ZL4~2Y&`JQ!9L0$Z8_jp^{^Lq)iP&`c7+77NCI{1);|&BB1Q3B4#E0BSZz_3 zIoIRC7nez=^7~>R{$9qO!o^yrQtn%i*HO$b)i=3(fP8*0)qjbAO7*v541XVH$jAH@ z%JjlJwUOGCyepN}XtiEjp+w4luZ>ja<~^#dkXxpW^bntgHp{qf75JjS9Rha>+$V64 zz=Hx032ar)Kq<8+jk=bu(u0R?LO3wN`zL^APyE9G{@siGVFy zV~kCwyv4K+qx+M#gC-QduI(gte+8^@iA^Xp^qs_RcGBfo0r$}~e2~$q9P8pKeQ^=P z(IxoXPK(6-9$Mos&|4LrDp-W!<`6v?VmG$|c0#8}U#5RiRt9*Avr1nRPGxkFd7VL*^j^;W`ab=5?{~T)i}6-kfO8y!)Hl3WI2xccfEq-nK{(^3)kt-x z|1QT4<>c5#$82yOb94&7)KO-<iN2~Hcd05>?md`sKOTnKVha6j# zH%fkTY*lxbYX(n3x6!KfiQqC9r}KpDXY9jg7Sr*FQ>QWb2Qe;suNHsl zf)+Nq=x&-1xL)vk>1yB)kOlat;7Zoq0W|Pp<6!(7D0%5y z!T%|ZNnxp?Tn|IK!X}E9Yk@zdSirX`E7&MtKT4tP0DNw;y?FpO?j3;TbO5k79RjSS z=#&98gvJ6MN8@JH%?t9n(KtKPT59z)7B|-=u*I!>1wO-K8VLo z-6rB~%A0iSv~3XI0SIy9i;$i%b+1VGD!b@~X?vBuR6l(m_*189D!bIwIdt=MO=Z)X z%B|cghuB-By;Zi^8#<3q?=8}?!XK;dqK~IrW7WMhcE%iG%~8LgHNfZ4{eWy}sqmMA z^Y)CTkp2Y7{B^=#C!BSVx?9!>f1B{Pfit9K8!XRk*(;pA(0m#=_j|8sYMO*@X)Mq* z>4C-6*CyGN<-$15xgM{nKMi9*=fj}q~M)t$eg?O)T5w4& zVF^sS*MT!D?`tZUngoP7fgb@zr&2z1VghFY#;4v5IB4oefTO0y3RpS@aO~71;2Bf5 z08X7s-mmH0sWCuw0Pv!zJ1EtNs%U(htXmu31+o*ryJ%J82l)L2zn|fEAC$fT{~!3> z5BeZ}zXtDH{CgDQ*`W=q2p(o)TtDpm~ee9oR+!x_4EBiAbwdeexH2|+Gnbl2#mv~3= zPCkM++*penyq;|*N*$O}tPBRM13Uj$1Uh(@0<=e+YyZf%=CZ}y_G z^JcfT4L&M&(4f>?bH7yvZhGm$wGPku3odV-edXNA33JoDc^?@@^TPAn79=)xwq2t* z!Mw0_-rP<57o2WrCnsiax~%5uFlolw6IWbrDVv^u??uJebZF+6`Sn7`|0UMv zTSrV)yj~-QJ-u@zUjoT}IxdDA0^s;R_1C`)GcGfV1If2jv0cT=+o@r@dbP9$k{>ul z=h1ZYMYfd=M~niUot~H$=)BJB@^>x+AE--nDyqnCQVlPBsOfgMhMoBpUKRG2!Q)M- zCwE0cg5hPW>UAKPAW6G5sV{f+_de?N`a3uKJD-AB@usTYueA=chvc0um($@@1G81t zaB6`Tuj;^^cjpc}tQ~QuH;_zvy{cDL1IcUQ?pD7Z&*WK>bmJ7EMf9!}8xzp>C-a^Z8a#uE17%^h= z#m)k+%d5JW$-M%Kj-@X8;FQ4!T?I}fkoj@*3&nw+<&__zj#y z0!x(Chac2gn*+(GR0RAWdrm&(bvboVTX|HF*+-p7bMkrB>vK8-$rr`cs}&AbC#b*Z zMGYuk{}R7{Nil}8!r^s-QQ>g8#1k7;{7Xu?1YIthKv$SoWnY@A`5IVKZz?8;qoJe$hTw|NcrWxRcv$d|y9#?-;xrDtzM|8=|n=se=(Qi^!EH~T6g zf#g51Yy$N!nTlBe5`AdVk+4o9rbZ(0P28=y4yWc)T@L&SL9f@1#%TFq>YNYDk;Wzb ze`@iE(Fm+u27So(!Nih8y}#|x^*<6m+e0)(wW_+PTP zO#B6wEE~gP(K%EH9LU{Xaufc?C+Pw1`Gd@!&)_NE)2Ws@+bFj5hVAdHhvT~ zKHv%P$)?vndUJv`2>t9Fsu_WSn&F>;-wS|W?34vWQGw@kE_VW%hu;NEe83>-GS~NlSe;rMVh)UeO)1|)fGGmj8*Y^Ww?g*W!21j<u^a+ zhC?5lH9(0Qt1cRg-;*s77kl-|C!jX(XN_mA&R zSpCC+KfnH!YxJsl!<4H7??55*bAa*KimH(M@sw4*;mYAvlZPuK9`lY+{`YuQANrVo MiLzf=G0^#c01&Z{RR910 delta 23310 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 Date: Tue, 9 May 2023 00:54:23 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E6=94=B9=E4=B8=BA=E4=BD=BF=E7=94=A8ProgID?= =?UTF-8?q?=E6=9D=A5=E5=88=A4=E6=96=ADword=E6=98=AF=E5=90=A6=E5=AD=98?= =?UTF-8?q?=E5=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ChineseSubtitleConversionTool/FormMain.cs | 76 +++++------------- .../Debug/ChineseSubtitleConversionTool.exe | Bin 99328 -> 98816 bytes 2 files changed, 21 insertions(+), 55 deletions(-) diff --git a/ChineseSubtitleConversionTool/FormMain.cs b/ChineseSubtitleConversionTool/FormMain.cs index 31ab6c2..00ee31e 100644 --- a/ChineseSubtitleConversionTool/FormMain.cs +++ b/ChineseSubtitleConversionTool/FormMain.cs @@ -19,25 +19,10 @@ public partial class FormMain : Form private string OpenFileDefineExt = ""; private string OpenFileDefineName = ""; private MainConfig Config; - private Task officeIsReadyTask; #region 初始化相关 public FormMain() { - this.officeIsReadyTask = Task.Factory.StartNew(() => - { - try - { - OfficeWordConvert owc = new OfficeWordConvert(); - owc.Dispose(); - return true; - } - catch (Exception err) - { - Console.WriteLine(err); - return false; - } - }); InitializeComponent(); Config = MainConfig.Load(); } @@ -63,58 +48,39 @@ private void FormMain_Load(object sender, EventArgs e) rbConvertHigh.Enabled = false; rbConvertOldWord.Enabled = true; rbConvertQuick.Enabled = true; - Task.Factory.StartNew(() => + if (Type.GetTypeFromProgID("Word.Application") != null) { - this.officeIsReadyTask.Wait(); - if (this.officeIsReadyTask.Result) + if (Config.ConvertOption == enumConvertOption.Null) { - if (Config.ConvertOption == enumConvertOption.Null) - { - Config.ConvertOption = enumConvertOption.High; - } - this.Invoke(new Action(() => - { - rbConvertHigh.Enabled = true; - })); + Config.ConvertOption = enumConvertOption.High; } - else + rbConvertHigh.Enabled = true; + } + else + { + switch (Config.ConvertOption) { - switch (Config.ConvertOption) - { - case enumConvertOption.Null: - Config.ConvertOption = enumConvertOption.Quick; - break; - case enumConvertOption.High: - Config.ConvertOption = enumConvertOption.Quick; - break; - } - this.Invoke(new Action(() => - { - rbConvertHigh.Enabled = false; - })); + case enumConvertOption.Null: + Config.ConvertOption = enumConvertOption.Quick; + break; + case enumConvertOption.High: + Config.ConvertOption = enumConvertOption.Quick; + break; } - this.Invoke(new Action(() => - { - switch (Config.ConvertOption) - { - case enumConvertOption.High: - rbConvertHigh.Checked = true; - break; - case enumConvertOption.Quick: - rbConvertQuick.Checked = true; - break; - } - })); - }); + rbConvertHigh.Enabled = false; + } switch (Config.ConvertOption) { - case enumConvertOption.OldWord: - rbConvertOldWord.Checked = true; + case enumConvertOption.High: + rbConvertHigh.Checked = true; break; case enumConvertOption.Quick: rbConvertQuick.Checked = true; break; + case enumConvertOption.OldWord: + rbConvertOldWord.Checked = true; + break; } TipObject = new ToolTip(); diff --git a/ChineseSubtitleConversionTool/bin/Debug/ChineseSubtitleConversionTool.exe b/ChineseSubtitleConversionTool/bin/Debug/ChineseSubtitleConversionTool.exe index 50c11e63ee3f33229809542a69e3f0816cfabf7e..dc0da94ca8ffe187023beb4520bd521913e893dc 100644 GIT binary patch delta 22115 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 DDDp4n delta 22563 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 Tzo*LTu={-}=~HP#o%8 Date: Tue, 9 May 2023 10:04:04 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E6=89=B9=E5=A4=84=E7=90=86=E5=8F=AF?= =?UTF-8?q?=E6=8B=96=E6=8B=BD=E5=8D=95=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ChineseSubtitleConversionTool/FormMain.cs | 2 +- .../Debug/ChineseSubtitleConversionTool.exe | Bin 98816 -> 98816 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/ChineseSubtitleConversionTool/FormMain.cs b/ChineseSubtitleConversionTool/FormMain.cs index 00ee31e..8e8e7b2 100644 --- a/ChineseSubtitleConversionTool/FormMain.cs +++ b/ChineseSubtitleConversionTool/FormMain.cs @@ -147,7 +147,7 @@ private void FormMain_DragEnter(object sender, DragEventArgs e) private void FormMain_DragDrop(object sender, DragEventArgs e) { string[] paths = (string[])e.Data.GetData(DataFormats.FileDrop, true); - if (paths.Length > 1) + if (paths.Length > 1|| tabControlMain.SelectedIndex == 1) { tabControlMain.SelectedIndex = 1; txtPath.Text = Path.GetDirectoryName(paths[0].Trim()); diff --git a/ChineseSubtitleConversionTool/bin/Debug/ChineseSubtitleConversionTool.exe b/ChineseSubtitleConversionTool/bin/Debug/ChineseSubtitleConversionTool.exe index dc0da94ca8ffe187023beb4520bd521913e893dc..a319153c36c74ab1c646f331ab2983bf18eaf321 100644 GIT binary patch delta 2144 zcmY+F3rtmY9LK-^>$&Hii(I@9xLkRoCnfgRB*s+3a zAViDPAtWW4ZNd?U5jJB&Ax%3(o9MPevKe=*R04|R5>v>WRWx*t8yqH^$-M-ICYMsA zSkX(!z@W`Y^;|w=ieLruaZ{wbl$4ztsZ(eDYQ-~wj6`takTD$UHQvroN zEjh`SOEWBL$Dy=7T4ti$D&3*^M)N66C0iA+U)1XRe-5xRRxID1nm{%@Fp<<{fj1mV zhN+^V$)dD6TWO#`&as3zmHEB&00cvmb&|Br5=r5&S$bKqKRxIlC1bKRiEOoXDcK$? z*Xzmmt;cENUE2ayDF0|nqwzGmk8Ha=j_gT$N|@T%CaNy?E`r?lq z2d1#)a+~ugEA+cViy1Y$*A+|ls4I-}4Y>MPzJKfV*CPoYWO&K$TewLbhst9MH&E2N z%sIkDD~Gb4V$1#CWEERHU9?2Nhh0`X55$;GpArS3HeS;%5?Qfbr?-gg2&C7d#Ptyc zW2a75o1HsxO{WK>xggBZJhN=^JPcX%B`I;uMmvwdphw3a1Urv{D@hZ7rN9{MnXA$J zq|LyGI&F=b$K!A#S<^zKC-`i{&C|$i&gKbdOVOy#oW~R4p07|VZVN@+jZvLmv=#AW zoKE#ui>v=lb(lyT!={cSO_X3UXnHu;ajOcX2xgU#> zkfCY)({}O2=+fz-X)k{Yl?$~BZM47~2$@jo4`Fve2$mo#QxjVvMC4+W{wkmY!{K8> zE@J4XQmD(+!gJBBQ{EZ{QM z;wP2bJveJ06KXJ~Vh8eq&hZ-TDN|fKP!aSke+DBuEeaau>#(j|(;9=W@(nnr(@69U zz7e?Yo6)1w{5$5q3Hx=>l;AhS=GY#v1KhKmV1WZOS;NJ=V!;`;HIgZ*1z@TT_LyzEcb Ho?`kB6!^yS delta 2154 zcmY+G32YQq7{~u_nVp@j-F0TS-7e6Bo7yf=+CnQ-f>LN#VB5ZK4@yChqd<&>aD`H` zyKU1nQc2fI3gUs7pj^`GLP$Uo3+3V4LRcwgL*jQ_@j3Iw}G?)3*d2B3Or$$(4cz`o#zhb&9 zuww5*pr8-XyyO#mV#6(60{cY0D2}u|u&6d$T8R8{>3%Zx8Dy~bWwP-Q9UixknQ2#q zoo*`>Yx-<*yG2Fx$&eK5+BsUnTrB}mgrsV>pa}MDE3?0o>I3BUJg~TJip@6zmd##3 zs4vmtOSO25;gRagh|&|)J+>rPte&u?_&7P%Eu(2Y_2pW4IvKa5NJekFV)u=wa*0~G zpejm!N-LE-Wb336PJJ0kv_={z18S#qn}j#)#|@e6%D5)cm?G8}Co@)}TH@2mX2xfb zS{Z-St(AC2v}|^09mZ%A6su*9M33g*LhBbSo8qX^nfR07;;E1_4e@tM9EKI+ z3_3vC2z+4Ds?-U56t0dpv_$E7J_ZRB46@s&^K>+38MM@1#50gQQKMG;Ed;m^JtnPJ z0(?9UW`_*1!B)Yuuqek!>~hrdZ0yjf6~)r4JQt0*Mr4n)l21nRB!m97t>IH}*`!ZB zO_&PrWJ5dp>;^s+Z6-amZQ;{UoM&`srv<)Wn;e}{7DOK6ZXW?6&qTXz8zfgp`I<Sw@D{b8PR@|64R zH|ZbB3*eMVR?-4EZ_+ub2_?9!QHa`Kkz~SahN#b73Yj*8w%(AimzSdUF&*M%XgBGK zBSv)oF&*RO_(i8y$)9qP2a!OBjkdrVq6+v8!f(kZc_o56g(3*ZXL%LEhN!o%Mz2n% zvBoK)8p(7@X|K?Up=)?GBs!ur>KVL-&%+&)HpYplL6FWY?d|@OB5QEdq+W`gkH(;( zRm5FGExy+&8p1cOeqjN6b?iiu^E_XG6%|@&C#sy6_$#<<(iG(F7+#M}1&2tPLQq5VElw@#hXjiEyM z3Y^u+D7pd{VpV}nEOcXlGmKk0HN(L~gt55#$rNF{rc*QA7ESAUO1ouhv-G^&d0JjG z=ID`&bu!w9vFa&W7cxV$^w0w}0~;RJsTmo1QGe|~jqB8mb*!*FjP(Pw2*Rdzf<7M+ zoOw#SU}`l~GXl?onNNyFFl>QF&G=DI+^>@{cLaw`txwlR)2H~+^NAoU<}Q1|s#aDO zi(lg+?U&g5l^;dq3$fexN<&}y_Z%8Cz2b=ddMtP~ael(hweM)T7P_|4)lOgj_U&78 z*hqOp$ZH?bv~W&G-_}37icW9Z-krl5TrZjb0<@%B?S5EvxQ7LfmglnLOr6f;qt40f Rp5L-M`=}CTf3awm?SCT~#ytQ4 From 78193363ebb9130e26f2a4762cea4882a1dd4075 Mon Sep 17 00:00:00 2001 From: lin <2920155761@qq.com> Date: Tue, 9 May 2023 19:47:31 +0800 Subject: [PATCH 5/8] =?UTF-8?q?word=E5=BA=94=E7=94=A8=E6=B1=A0=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=BF=BB=E8=AF=91=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChineseSubtitleConversionTool.csproj | 2 + .../FormMain.Designer.cs | 2 + ChineseSubtitleConversionTool/FormMain.cs | 43 +++++++- ChineseSubtitleConversionTool/Global.cs | 3 - ChineseSubtitleConversionTool/ListViewSort.cs | 3 - ChineseSubtitleConversionTool/MainConfig.cs | 4 - .../OfficeWordConvert.cs | 97 +++--------------- ChineseSubtitleConversionTool/Program.cs | 2 - ChineseSubtitleConversionTool/Serialize.cs | 2 - .../WordApplication.cs | 77 ++++++++++++++ .../WordApplicationPool.cs | 66 ++++++++++++ .../Debug/ChineseSubtitleConversionTool.exe | Bin 98816 -> 100352 bytes 12 files changed, 203 insertions(+), 98 deletions(-) create mode 100644 ChineseSubtitleConversionTool/WordApplication.cs create mode 100644 ChineseSubtitleConversionTool/WordApplicationPool.cs diff --git a/ChineseSubtitleConversionTool/ChineseSubtitleConversionTool.csproj b/ChineseSubtitleConversionTool/ChineseSubtitleConversionTool.csproj index acf91bd..bca356d 100644 --- a/ChineseSubtitleConversionTool/ChineseSubtitleConversionTool.csproj +++ b/ChineseSubtitleConversionTool/ChineseSubtitleConversionTool.csproj @@ -66,6 +66,8 @@ + + FormMain.cs Designer diff --git a/ChineseSubtitleConversionTool/FormMain.Designer.cs b/ChineseSubtitleConversionTool/FormMain.Designer.cs index ffdf62b..bf97005 100644 --- a/ChineseSubtitleConversionTool/FormMain.Designer.cs +++ b/ChineseSubtitleConversionTool/FormMain.Designer.cs @@ -361,6 +361,7 @@ private void InitializeComponent() this.rbConvertHigh.Text = "高精度"; this.rbConvertHigh.UseVisualStyleBackColor = true; this.rbConvertHigh.CheckedChanged += new System.EventHandler(this.rbConvertOption_CheckedChanged); + this.rbConvertHigh.CheckedChanged += new System.EventHandler(this.rbConvertHigh_CheckedChanged); // // rbConvertOldWord // @@ -433,6 +434,7 @@ private void InitializeComponent() this.Name = "FormMain"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "繁体简体字幕转换工具"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormMain_FormClosing); this.Load += new System.EventHandler(this.FormMain_Load); this.DragDrop += new System.Windows.Forms.DragEventHandler(this.FormMain_DragDrop); this.DragEnter += new System.Windows.Forms.DragEventHandler(this.FormMain_DragEnter); diff --git a/ChineseSubtitleConversionTool/FormMain.cs b/ChineseSubtitleConversionTool/FormMain.cs index 8e8e7b2..2a925a5 100644 --- a/ChineseSubtitleConversionTool/FormMain.cs +++ b/ChineseSubtitleConversionTool/FormMain.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; @@ -97,6 +96,16 @@ private void FormMain_Load(object sender, EventArgs e) TipObject.SetToolTip(this.rbConvertHigh, "选择后会结合上下文语义转换速度慢,全局有效!"); } + /// + /// 关闭窗体 + /// + /// + /// + private void FormMain_FormClosing(object sender, FormClosingEventArgs e) + { + + } + /// /// 初始化列表 /// @@ -147,7 +156,7 @@ private void FormMain_DragEnter(object sender, DragEventArgs e) private void FormMain_DragDrop(object sender, DragEventArgs e) { string[] paths = (string[])e.Data.GetData(DataFormats.FileDrop, true); - if (paths.Length > 1|| tabControlMain.SelectedIndex == 1) + if (paths.Length > 1 || tabControlMain.SelectedIndex == 1) { tabControlMain.SelectedIndex = 1; txtPath.Text = Path.GetDirectoryName(paths[0].Trim()); @@ -434,6 +443,10 @@ private void btnStartConvert_Click(object sender, EventArgs e) } pbConvert.Value = 0; pbConvert.Maximum = dicFile.Count; + if(convertOption == enumConvertOption.High) + { + WordApplicationPool.SemaphoreInit(dicFile.Count); + } btnStartConvert.Hide(); int cnt = 0; Stopwatch Watch = new Stopwatch(); @@ -486,6 +499,30 @@ private void rbConvertOption_CheckedChanged(object sender, EventArgs e) } } + private void rbConvertHigh_CheckedChanged(object sender, EventArgs e) + { + RadioButton radioButton = (RadioButton)sender; + if (radioButton.Checked) + { + Task.Factory.StartNew(() => + { + try + { + WordApplicationPool.PoolInit(1); + } + catch (Exception err) + { + this.Invoke(new Action(() => + { + rbConvertHigh.Enabled = false; + rbConvertQuick.Checked = true; + })); + Console.WriteLine(err); + } + }); + } + } + #endregion #region 列表相关 @@ -628,7 +665,6 @@ public string StringToSimlified(string str, enumConvertOption convertOption = en isWait = false; HighConvert.BindConvertEvent(ChangeProcessBarValue); string ret = HighConvert.Cht2Chs(str); - HighConvert.Dispose(); return ret; default: return ""; @@ -670,7 +706,6 @@ public string StringToTraditional(string str, enumConvertOption convertOption = isWait = false; HighConvert.BindConvertEvent(ChangeProcessBarValue); string ret = HighConvert.Chs2Cht(str); - HighConvert.Dispose(); return ret; default: return ""; diff --git a/ChineseSubtitleConversionTool/Global.cs b/ChineseSubtitleConversionTool/Global.cs index 1374cfe..13b01c7 100644 --- a/ChineseSubtitleConversionTool/Global.cs +++ b/ChineseSubtitleConversionTool/Global.cs @@ -1,9 +1,6 @@ using System; -using System.Collections.Generic; using System.IO; -using System.Linq; using System.Reflection; -using System.Text; using System.Windows.Forms; namespace ChineseSubtitleConversionTool diff --git a/ChineseSubtitleConversionTool/ListViewSort.cs b/ChineseSubtitleConversionTool/ListViewSort.cs index e4a9c7d..176ac8a 100644 --- a/ChineseSubtitleConversionTool/ListViewSort.cs +++ b/ChineseSubtitleConversionTool/ListViewSort.cs @@ -1,8 +1,5 @@ using System; using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Windows.Forms; namespace ChineseSubtitleConversionTool diff --git a/ChineseSubtitleConversionTool/MainConfig.cs b/ChineseSubtitleConversionTool/MainConfig.cs index 649fd08..1e879fe 100644 --- a/ChineseSubtitleConversionTool/MainConfig.cs +++ b/ChineseSubtitleConversionTool/MainConfig.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; namespace ChineseSubtitleConversionTool { diff --git a/ChineseSubtitleConversionTool/OfficeWordConvert.cs b/ChineseSubtitleConversionTool/OfficeWordConvert.cs index 11c0266..e32a969 100644 --- a/ChineseSubtitleConversionTool/OfficeWordConvert.cs +++ b/ChineseSubtitleConversionTool/OfficeWordConvert.cs @@ -1,17 +1,10 @@ -using Microsoft.Office.Interop.Word; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; +using System.IO; using System.Text; namespace ChineseSubtitleConversionTool { public class OfficeWordConvert { - private _Application appWord; - private Document doc; /// /// 转换进度 @@ -32,26 +25,6 @@ private void EventConvertCallback(double p) } } - /// - /// 构造函数 - /// - public OfficeWordConvert() - { - appWord = new Application(); - object template = Missing.Value; - object newTemplate = Missing.Value; - object docType = Missing.Value; - object visible = true; - doc = appWord.Documents.Add(ref template, ref newTemplate, ref docType, ref visible); - } - - /// - /// 析构函数 - /// - ~OfficeWordConvert() - { - Dispose(); - } /// /// 简体转繁体函数 @@ -70,7 +43,14 @@ public string Chs2Cht(string src) while ((line = sr.ReadLine()) != null) { cnt += line.Length; - sb.AppendLine(chs_to_cht(line).TrimEnd()); + if (isStringChinese(line) == false) + { + sb.AppendLine(line.TrimEnd()); + } + else + { + sb.AppendLine(WordApplicationPool.Get().chs_to_cht(line).TrimEnd()); + } if (100 * cnt / len - p > 1) { p = 100 * cnt / len; @@ -99,7 +79,14 @@ public string Cht2Chs(string src) while ((line = sr.ReadLine()) != null) { cnt += line.Length; - sb.AppendLine(cht_to_chs(line).TrimEnd()); + if (isStringChinese(line) == false) + { + sb.AppendLine(line.TrimEnd()); + } + else + { + sb.AppendLine(WordApplicationPool.Get().cht_to_chs(line).TrimEnd()); + } if (100 * cnt / len - p > 1) { p = 100 * cnt / len; @@ -111,56 +98,6 @@ public string Cht2Chs(string src) return sb.ToString(); } - public void Dispose() - { - object saveChange = 0; - object originalFormat = Missing.Value; - object routeDocument = Missing.Value; - if (appWord != null) - { - appWord.Quit(ref saveChange, ref originalFormat, ref routeDocument); - } - doc = null; - appWord = null; - GC.Collect(); - GC.SuppressFinalize(this); - } - - /// - /// 简体转繁体函数 - /// - /// 简体字符串 - /// 繁体字符串 - private string chs_to_cht(string src) - { - if (isStringChinese(src) == false) - { - return src; - } - appWord.Selection.Delete(); - appWord.Selection.TypeText(src); - appWord.Selection.Range.TCSCConverter(WdTCSCConverterDirection.wdTCSCConverterDirectionSCTC, true, true); - appWord.ActiveDocument.Select(); - return appWord.Selection.Text; - } - - /// - /// 繁体转简体函数 - /// - /// 繁体字符串 - /// 简体字符串 - private string cht_to_chs(string src) - { - if (isStringChinese(src) == false) - { - return src; - } - appWord.Selection.Delete(); - appWord.Selection.TypeText(src); - appWord.Selection.Range.TCSCConverter(WdTCSCConverterDirection.wdTCSCConverterDirectionTCSC, true, true); - appWord.ActiveDocument.Select(); - return appWord.Selection.Text; - } /// /// 检查字符串中是否包含汉字 diff --git a/ChineseSubtitleConversionTool/Program.cs b/ChineseSubtitleConversionTool/Program.cs index 2e3a573..e896947 100644 --- a/ChineseSubtitleConversionTool/Program.cs +++ b/ChineseSubtitleConversionTool/Program.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Windows.Forms; namespace ChineseSubtitleConversionTool diff --git a/ChineseSubtitleConversionTool/Serialize.cs b/ChineseSubtitleConversionTool/Serialize.cs index 10f2d24..33ee9ba 100644 --- a/ChineseSubtitleConversionTool/Serialize.cs +++ b/ChineseSubtitleConversionTool/Serialize.cs @@ -1,9 +1,7 @@ using System; -using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Serialization.Formatters.Binary; -using System.Text; using System.Xml.Serialization; namespace ChineseSubtitleConversionTool diff --git a/ChineseSubtitleConversionTool/WordApplication.cs b/ChineseSubtitleConversionTool/WordApplication.cs new file mode 100644 index 0000000..9d4258a --- /dev/null +++ b/ChineseSubtitleConversionTool/WordApplication.cs @@ -0,0 +1,77 @@ +using Microsoft.Office.Interop.Word; +using System; +using System.Reflection; + +namespace ChineseSubtitleConversionTool +{ + public class WordApplication + { + private _Application appWord; + private Document doc; + public WordApplication() + { + appWord = new Application(); + object template = Missing.Value; + object newTemplate = Missing.Value; + object docType = Missing.Value; + object visible = true; + doc = appWord.Documents.Add(ref template, ref newTemplate, ref docType, ref visible); + } + + /// + /// 析构函数 + /// + ~WordApplication() + { + Dispose(); + } + public void Dispose() + { + object saveChange = 0; + object originalFormat = Missing.Value; + object routeDocument = Missing.Value; + if (appWord != null) + { + appWord.Quit(ref saveChange, ref originalFormat, ref routeDocument); + } + doc = null; + appWord = null; + GC.Collect(); + GC.SuppressFinalize(this); + } + /// + /// 简体转繁体函数 + /// + /// 简体字符串 + /// 繁体字符串 + public string chs_to_cht(string src) + { + appWord.Selection.TypeText(src); + appWord.Selection.Range.TCSCConverter(WdTCSCConverterDirection.wdTCSCConverterDirectionSCTC, true, true); + appWord.ActiveDocument.Select(); + string str = appWord.Selection.Text; + appWord.Selection.Delete(); + WordApplicationPool.Return(this); + return str; + } + + /// + /// 繁体转简体函数 + /// + /// 繁体字符串 + /// 简体字符串 + public string cht_to_chs(string src) + { + appWord.Selection.TypeText(src); + /*UseVariants + Boolean + Optional Boolean. True if Word uses Taiwan, Hong Kong SAR, and Macao SAR character variants. Can only be used if translating from Simplified Chinese to Traditional Chinese*/ + appWord.Selection.Range.TCSCConverter(WdTCSCConverterDirection.wdTCSCConverterDirectionTCSC, true, false); + appWord.ActiveDocument.Select(); + string str = appWord.Selection.Text; + appWord.Selection.Delete(); + WordApplicationPool.Return(this); + return str; + } + } +} diff --git a/ChineseSubtitleConversionTool/WordApplicationPool.cs b/ChineseSubtitleConversionTool/WordApplicationPool.cs new file mode 100644 index 0000000..e4f9466 --- /dev/null +++ b/ChineseSubtitleConversionTool/WordApplicationPool.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Threading; + +namespace ChineseSubtitleConversionTool +{ + public static class WordApplicationPool + { + private static readonly SemaphoreSlim semaphore = new SemaphoreSlim(1,Environment.ProcessorCount); + private static readonly Queue pool = new Queue(); + + public static void PoolInit(int num) + { + for (int i = 0; i < num; ++i) + { + WordApplication wordApplication = new WordApplication(); + lock (pool) + { + pool.Enqueue(wordApplication); + } + } + } + + public static void SemaphoreInit(int num) + { + int limitSemaphore = Environment.ProcessorCount - semaphore.CurrentCount; + + if (limitSemaphore == 0) + { + return; + } + num /= 2; + if (num > limitSemaphore) + { + semaphore.Release(limitSemaphore); + } + else if(num <= limitSemaphore && num > 0) + { + semaphore.Release(num); + } + } + + public static WordApplication Get() + { + semaphore.Wait(); + + lock (pool) + { + if (pool.Count > 0) + { + return pool.Dequeue(); + } + } + return new WordApplication(); + } + + public static void Return(WordApplication obj) + { + lock (pool) + { + pool.Enqueue(obj); + } + semaphore.Release(); + } + } +} diff --git a/ChineseSubtitleConversionTool/bin/Debug/ChineseSubtitleConversionTool.exe b/ChineseSubtitleConversionTool/bin/Debug/ChineseSubtitleConversionTool.exe index a319153c36c74ab1c646f331ab2983bf18eaf321..1e3bd50d4e7a9cd13c65f35e2f4e0a29fa6907d0 100644 GIT binary patch delta 17457 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�-Wh4D;r?pk%9Kcp;lNr@%z3Bb*j!b=h;Z)uBfT zXYAPD;PN<3<(jcv2bO6jdAKl}VFtq#hIxD5FBJ)Au@1=FraT?jI&D4O}&wH(2)P9xg|=7Y5}oXYZLYTwE&l Wct(ovrpkR~d;AIUH?e)N^M3=ka(uG@ delta 15946 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

m z%yrHI{Yvo1z--qdU}k6;a71`z2VP}Qf=*0#vdB|-6L4whR^Xqr?*OvgffZ1qqKknN z-*agQrWa7+TQ3{vN}$C4pM&fJlvrY%p!)$OezcPTnt$deX*^C75?}0OK@tN>tU35a z57i~GTH)&ipu~|Q0D3A=;upiYz}YxxNV*PdnZz5cBH;D--Lb?As}l4_3x1$#7g^$@ zh{!oIX*+4tljsyI&Njji2Gr*uj%Yagb$qgnV#T)0c>Sd;d^5@ScA+J+zB)W#_Di@s z-!9MSiIeU5vMl3WoEX(lLinaWdB*S#S3J0_c|_0fA8j!6AsB9H0XnykG;{2A6+xW7 z@!3YY?iBUXjZ4TEbn~9;28!Nh$($V7yB}@={B0IvmBN9RVi4cNAanVgFU()eEil*2 z^%f7B-kXM8GIRR$5%U@w=GQMDKEJ-P(Gm`tKE1d3#GFF&>$y|SDf0%%-hoH z9P=RGq$RK`RcpG`Jge{mTZH_nMXreEPc8L0e5vJ-gLG(iA(gIK8XmZo>2f#a+B1th zGT=|%go@S`c^n=o@gK%AgnN+(-xhm34rMSO7GR~vhS;)6`P&36$|krBvEPuxW{0DV zHbNXbxm}?=2ZwNG$-7nTzfqlY(7|1qP1!<=kj#jXD#E-ykuGfs-U|ML2UO$xGYFj!9K*0}l{sD^!<5!5X&8T3!~Jv6!`-BO z80aB?@-ZWVzmb6ZfZffb;$R^+3MATP9ywZd*&2VuAkzVb{UEz~hW=e$0+OPwvB6 z+-~Zu!+lqT6~X{@Qy(w|*rW?HgA)@_(|8_73+%NP|IGRv-8?MLGg zFK1ZD#jQD36!IrO#?uF+FVQj%^9(#1QLP#NW&^n&Lfy!GU&~aRU2{kWGS=boI8hiS zcl$%!DIw_(;V(=4$t~7@JOI$8*8fbe(8A;m;}4_4cnqSVErwkW;ghblWj6f7*D*a| z_*)ia*_{rD8@=yOp5ZBo=6i}XtBAy}Is{1R35BE)!el5yNRpEfvl`$ZlL@UqdBC57 zi`|^hJRoX`NCgn1&7bliTF~x@-ac5q7G51f{zNL!Q9K{TVXkcbseIL2sUlFw(=frI z%jIinMmNA&8UCxWN~sF{Eh$c|R8OA1mE6jfoA95x`6}n$=6D_GIO*^u4|8rM4`a%? ztI)R|PY4b16nUV=Oi#XT$JBctVm*R6$H0FA=TP&`t-RgUmilP-*aXIF3a+6#GJOjm zRmRX0B7Ak>tHU)5bSA40f|$$1+aQ)WjC2iPZe-~?X}I~m(co}=vycVooMsG!@GsyN zVz5+8ao?a8<^@H5nOwK|mz83J*s^(iZ;_WchRs0;ljoR2&Gay#Sy%|l6!yf3s}6#w zGBcw4hk8TSKb|qZI*ce%e?01Pu$Y-E8HO@UaKgs2#;Bo-wr0RXN`&10l+BtaDN&_I z39nnDzIaJk*J#}EE<{%Ff;~B1G7|JkVPqdFn+Jl!2Z9KxyV*EITZpXD9KYiHV zck?d>i7ws;PTe?dOP>)V@BZ`IdqX{{jLoM8i531>`cJgE)O@BRn@WOmT5Qi Date: Wed, 10 May 2023 16:37:16 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E6=8C=89=E8=A1=8C?= =?UTF-8?q?=E7=BF=BB=E8=AF=91=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?word=E5=BA=94=E7=94=A8=E6=B1=A0=EF=BC=8C=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E9=80=9F=E5=BA=A6=E8=B6=85=E7=BA=A7=E6=8F=90=E5=8D=87=EF=BC=8C?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E9=80=80=E5=87=BA=E5=90=8Eword=E6=AE=8B?= =?UTF-8?q?=E7=95=99=E8=A2=AB=E8=87=AA=E5=8A=A8=E4=BF=9D=E5=AD=98=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=8C=E8=A7=A3=E5=86=B3word=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E8=BF=9B=E7=A8=8B=E5=9C=A8=E5=BA=94=E7=94=A8=E9=80=80=E5=87=BA?= =?UTF-8?q?=E5=90=8E=E4=B8=8D=E9=80=80=E5=87=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ChineseSubtitleConversionTool/FormMain.cs | 10 ++- .../OfficeWordConvert.cs | 63 +++------------- .../WordApplication.cs | 29 ++++---- .../WordApplicationPool.cs | 67 ++++++++++++------ .../Debug/ChineseSubtitleConversionTool.exe | Bin 100352 -> 100352 bytes 5 files changed, 78 insertions(+), 91 deletions(-) diff --git a/ChineseSubtitleConversionTool/FormMain.cs b/ChineseSubtitleConversionTool/FormMain.cs index 2a925a5..7771424 100644 --- a/ChineseSubtitleConversionTool/FormMain.cs +++ b/ChineseSubtitleConversionTool/FormMain.cs @@ -103,7 +103,12 @@ private void FormMain_Load(object sender, EventArgs e) /// private void FormMain_FormClosing(object sender, FormClosingEventArgs e) { + this.Hide(); + WordApplicationPool.CreatingWordApplication = false; + lock (WordApplication.CreatingWordApplication) + { + } } ///

@@ -445,7 +450,7 @@ private void btnStartConvert_Click(object sender, EventArgs e) pbConvert.Maximum = dicFile.Count; if(convertOption == enumConvertOption.High) { - WordApplicationPool.SemaphoreInit(dicFile.Count); + WordApplicationPool.InitSemaphore(dicFile.Count); } btnStartConvert.Hide(); int cnt = 0; @@ -472,6 +477,7 @@ private void btnStartConvert_Click(object sender, EventArgs e) if (cnt >= fileLength) { Watch.Stop(); + WordApplicationPool.CreatingWordApplication = false; MessageBox.Show("转换完成,共输出" + pbConvert.Value + "个字幕文件,耗时" + string.Format("{0:0.###}", Watch.Elapsed.TotalSeconds) + "秒。", "转换完成", MessageBoxButtons.OK, MessageBoxIcon.Information); pbConvert.Value = 0; btnStartConvert.Show(); @@ -508,7 +514,7 @@ private void rbConvertHigh_CheckedChanged(object sender, EventArgs e) { try { - WordApplicationPool.PoolInit(1); + WordApplicationPool.InitPool(); } catch (Exception err) { diff --git a/ChineseSubtitleConversionTool/OfficeWordConvert.cs b/ChineseSubtitleConversionTool/OfficeWordConvert.cs index e32a969..a5a961a 100644 --- a/ChineseSubtitleConversionTool/OfficeWordConvert.cs +++ b/ChineseSubtitleConversionTool/OfficeWordConvert.cs @@ -1,4 +1,5 @@ -using System.IO; +using Microsoft.Office.Interop.Word; +using System.IO; using System.Text; namespace ChineseSubtitleConversionTool @@ -33,33 +34,11 @@ private void EventConvertCallback(double p) /// 繁体字符串 public string Chs2Cht(string src) { - int len = src.Length; - int cnt = 0; - double p = 0; - StringBuilder sb = new StringBuilder(); - using (StringReader sr = new StringReader(src)) - { - string line; - while ((line = sr.ReadLine()) != null) - { - cnt += line.Length; - if (isStringChinese(line) == false) - { - sb.AppendLine(line.TrimEnd()); - } - else - { - sb.AppendLine(WordApplicationPool.Get().chs_to_cht(line).TrimEnd()); - } - if (100 * cnt / len - p > 1) - { - p = 100 * cnt / len; - EventConvertCallback(p > 100 ? 100 : p); - } - } - } + WordApplication wordApplication = WordApplicationPool.Get(); + string str = wordApplication.chs_to_cht(src); + WordApplicationPool.Return(wordApplication); EventConvertCallback(100); - return sb.ToString(); + return str.Replace("\r", "\r\n"); } /// @@ -69,33 +48,11 @@ public string Chs2Cht(string src) /// 简体字符串 public string Cht2Chs(string src) { - int len = src.Length; - int cnt = 0; - double p = 0; - StringBuilder sb = new StringBuilder(); - using (StringReader sr = new StringReader(src)) - { - string line; - while ((line = sr.ReadLine()) != null) - { - cnt += line.Length; - if (isStringChinese(line) == false) - { - sb.AppendLine(line.TrimEnd()); - } - else - { - sb.AppendLine(WordApplicationPool.Get().cht_to_chs(line).TrimEnd()); - } - if (100 * cnt / len - p > 1) - { - p = 100 * cnt / len; - EventConvertCallback(p > 100 ? 100 : p); - } - } - } + WordApplication wordApplication = WordApplicationPool.Get(); + string str = wordApplication.cht_to_chs(src); + WordApplicationPool.Return(wordApplication); EventConvertCallback(100); - return sb.ToString(); + return str.Replace("\r","\r\n"); } diff --git a/ChineseSubtitleConversionTool/WordApplication.cs b/ChineseSubtitleConversionTool/WordApplication.cs index 9d4258a..0b9bdf6 100644 --- a/ChineseSubtitleConversionTool/WordApplication.cs +++ b/ChineseSubtitleConversionTool/WordApplication.cs @@ -8,14 +8,18 @@ public class WordApplication { private _Application appWord; private Document doc; + public static Object CreatingWordApplication = new Object(); public WordApplication() { - appWord = new Application(); - object template = Missing.Value; - object newTemplate = Missing.Value; - object docType = Missing.Value; - object visible = true; - doc = appWord.Documents.Add(ref template, ref newTemplate, ref docType, ref visible); + lock (CreatingWordApplication) + { + appWord = new Application(); + object template = Missing.Value; + object newTemplate = Missing.Value; + object docType = Missing.Value; + object visible = true; + doc = appWord.Documents.Add(ref template, ref newTemplate, ref docType, ref visible); + } } /// @@ -27,6 +31,7 @@ public WordApplication() } public void Dispose() { + appWord.Selection.Delete(); object saveChange = 0; object originalFormat = Missing.Value; object routeDocument = Missing.Value; @@ -46,13 +51,11 @@ public void Dispose() /// 繁体字符串 public string chs_to_cht(string src) { + appWord.Selection.Delete(); appWord.Selection.TypeText(src); appWord.Selection.Range.TCSCConverter(WdTCSCConverterDirection.wdTCSCConverterDirectionSCTC, true, true); appWord.ActiveDocument.Select(); - string str = appWord.Selection.Text; - appWord.Selection.Delete(); - WordApplicationPool.Return(this); - return str; + return appWord.Selection.Text; } /// @@ -62,16 +65,14 @@ public string chs_to_cht(string src) /// 简体字符串 public string cht_to_chs(string src) { + appWord.Selection.Delete(); appWord.Selection.TypeText(src); /*UseVariants Boolean Optional Boolean. True if Word uses Taiwan, Hong Kong SAR, and Macao SAR character variants. Can only be used if translating from Simplified Chinese to Traditional Chinese*/ appWord.Selection.Range.TCSCConverter(WdTCSCConverterDirection.wdTCSCConverterDirectionTCSC, true, false); appWord.ActiveDocument.Select(); - string str = appWord.Selection.Text; - appWord.Selection.Delete(); - WordApplicationPool.Return(this); - return str; + return appWord.Selection.Text; } } } diff --git a/ChineseSubtitleConversionTool/WordApplicationPool.cs b/ChineseSubtitleConversionTool/WordApplicationPool.cs index e4f9466..bff083d 100644 --- a/ChineseSubtitleConversionTool/WordApplicationPool.cs +++ b/ChineseSubtitleConversionTool/WordApplicationPool.cs @@ -6,37 +6,60 @@ namespace ChineseSubtitleConversionTool { public static class WordApplicationPool { - private static readonly SemaphoreSlim semaphore = new SemaphoreSlim(1,Environment.ProcessorCount); + private static readonly SemaphoreSlim semaphore = new SemaphoreSlim(0,Environment.ProcessorCount); private static readonly Queue pool = new Queue(); + public static bool CreatingWordApplication = false; - public static void PoolInit(int num) + public static void InitPool() { - for (int i = 0; i < num; ++i) + if (pool.Count == 0) { - WordApplication wordApplication = new WordApplication(); - lock (pool) + CreateWordApplicationAsync(1); + } + } + public static void CreateWordApplicationAsync(int num) + { + CreatingWordApplication = true; + System.Threading.Tasks.Task.Factory.StartNew(() => + { + for (int i = 0; i < num; ++i) { - pool.Enqueue(wordApplication); + if(CreatingWordApplication) + { + WordApplication wordApplication = new WordApplication(); + lock (pool) + { + pool.Enqueue(wordApplication); + } + semaphore.Release(); + } } - } + }); } - public static void SemaphoreInit(int num) + public static void InitSemaphore(int num) { - int limitSemaphore = Environment.ProcessorCount - semaphore.CurrentCount; - - if (limitSemaphore == 0) - { - return; - } - num /= 2; - if (num > limitSemaphore) + if (num > 0) { - semaphore.Release(limitSemaphore); - } - else if(num <= limitSemaphore && num > 0) - { - semaphore.Release(num); + int limitSemaphore = Environment.ProcessorCount - semaphore.CurrentCount; + if (limitSemaphore == 0) + { + return; + } + if (num > semaphore.CurrentCount) + { + int releaseNum = 0; + if(num <= Environment.ProcessorCount) + { + releaseNum = num - semaphore.CurrentCount; + } + else if (num > Environment.ProcessorCount) + { + releaseNum = limitSemaphore; + } + CreateWordApplicationAsync(releaseNum); + } + } } @@ -51,7 +74,7 @@ public static WordApplication Get() return pool.Dequeue(); } } - return new WordApplication(); + return new WordApplication();//正常情況不会在这里创建WordApplication() } public static void Return(WordApplication obj) diff --git a/ChineseSubtitleConversionTool/bin/Debug/ChineseSubtitleConversionTool.exe b/ChineseSubtitleConversionTool/bin/Debug/ChineseSubtitleConversionTool.exe index 1e3bd50d4e7a9cd13c65f35e2f4e0a29fa6907d0..2a0e082b8e087673a35697e9be2ce097cbd81fcd 100644 GIT binary patch delta 22406 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 delta 22253 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 TZi2jL*iP?S=^xU@TKoS6LsyTM From 2110325442e73279f500e2c98d2a449ccfb23d75 Mon Sep 17 00:00:00 2001 From: lin <2920155761@qq.com> Date: Wed, 10 May 2023 17:14:02 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E5=8F=98=E9=87=8F=E5=90=8D=E6=94=B9?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ChineseSubtitleConversionTool/FormMain.cs | 2 +- .../OfficeWordConvert.cs | 5 +---- .../WordApplication.cs | 4 ++-- .../Debug/ChineseSubtitleConversionTool.exe | Bin 100352 -> 100352 bytes 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/ChineseSubtitleConversionTool/FormMain.cs b/ChineseSubtitleConversionTool/FormMain.cs index 7771424..75174ff 100644 --- a/ChineseSubtitleConversionTool/FormMain.cs +++ b/ChineseSubtitleConversionTool/FormMain.cs @@ -105,7 +105,7 @@ private void FormMain_FormClosing(object sender, FormClosingEventArgs e) { this.Hide(); WordApplicationPool.CreatingWordApplication = false; - lock (WordApplication.CreatingWordApplication) + lock (WordApplication.CreatingWordApplicationLock) { } diff --git a/ChineseSubtitleConversionTool/OfficeWordConvert.cs b/ChineseSubtitleConversionTool/OfficeWordConvert.cs index a5a961a..502d934 100644 --- a/ChineseSubtitleConversionTool/OfficeWordConvert.cs +++ b/ChineseSubtitleConversionTool/OfficeWordConvert.cs @@ -1,7 +1,4 @@ -using Microsoft.Office.Interop.Word; -using System.IO; -using System.Text; - + namespace ChineseSubtitleConversionTool { public class OfficeWordConvert diff --git a/ChineseSubtitleConversionTool/WordApplication.cs b/ChineseSubtitleConversionTool/WordApplication.cs index 0b9bdf6..cdafd35 100644 --- a/ChineseSubtitleConversionTool/WordApplication.cs +++ b/ChineseSubtitleConversionTool/WordApplication.cs @@ -8,10 +8,10 @@ public class WordApplication { private _Application appWord; private Document doc; - public static Object CreatingWordApplication = new Object(); + public static Object CreatingWordApplicationLock = new Object(); public WordApplication() { - lock (CreatingWordApplication) + lock (CreatingWordApplicationLock) { appWord = new Application(); object template = Missing.Value; diff --git a/ChineseSubtitleConversionTool/bin/Debug/ChineseSubtitleConversionTool.exe b/ChineseSubtitleConversionTool/bin/Debug/ChineseSubtitleConversionTool.exe index 2a0e082b8e087673a35697e9be2ce097cbd81fcd..f44b5611ae474debd72a08f5c78b477456e654c3 100644 GIT binary patch delta 5381 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 HCTRZ!4*8nz From 3775e7a84ddf13afbd24350fe7cdd6b7dc0c92b2 Mon Sep 17 00:00:00 2001 From: lin <2920155761@qq.com> Date: Wed, 10 May 2023 17:33:47 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ChineseSubtitleConversionTool/FormMain.cs | 2 +- .../WordApplicationPool.cs | 24 ++++++++++++++---- .../Debug/ChineseSubtitleConversionTool.exe | Bin 100352 -> 100352 bytes 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/ChineseSubtitleConversionTool/FormMain.cs b/ChineseSubtitleConversionTool/FormMain.cs index 75174ff..7215a7a 100644 --- a/ChineseSubtitleConversionTool/FormMain.cs +++ b/ChineseSubtitleConversionTool/FormMain.cs @@ -105,7 +105,7 @@ private void FormMain_FormClosing(object sender, FormClosingEventArgs e) { this.Hide(); WordApplicationPool.CreatingWordApplication = false; - lock (WordApplication.CreatingWordApplicationLock) + lock (WordApplication.CreatingWordApplicationLock)//初始化结束后再退出,否则新打开的word会残留在后台 { } diff --git a/ChineseSubtitleConversionTool/WordApplicationPool.cs b/ChineseSubtitleConversionTool/WordApplicationPool.cs index bff083d..15669ae 100644 --- a/ChineseSubtitleConversionTool/WordApplicationPool.cs +++ b/ChineseSubtitleConversionTool/WordApplicationPool.cs @@ -6,10 +6,11 @@ namespace ChineseSubtitleConversionTool { public static class WordApplicationPool { - private static readonly SemaphoreSlim semaphore = new SemaphoreSlim(0,Environment.ProcessorCount); + private static readonly SemaphoreSlim semaphore = new SemaphoreSlim(0,Environment.ProcessorCount);//控制数量 private static readonly Queue pool = new Queue(); - public static bool CreatingWordApplication = false; + public static bool CreatingWordApplication = false;//用于中断word应用创建 + //用户选择高精度时就参加一个word放入池中 public static void InitPool() { if (pool.Count == 0) @@ -17,6 +18,10 @@ public static void InitPool() CreateWordApplicationAsync(1); } } + ///

+ /// 异步创建word + /// + /// 要创建的数量 public static void CreateWordApplicationAsync(int num) { CreatingWordApplication = true; @@ -36,7 +41,10 @@ public static void CreateWordApplicationAsync(int num) } }); } - + /// + /// 根据文件数初始化word,最高不超过系统线程数,生成一个word释放一个信号,不阻塞线程 + /// + /// public static void InitSemaphore(int num) { if (num > 0) @@ -62,7 +70,10 @@ public static void InitSemaphore(int num) } } - + /// + /// 获取word + /// + /// public static WordApplication Get() { semaphore.Wait(); @@ -76,7 +87,10 @@ public static WordApplication Get() } return new WordApplication();//正常情況不会在这里创建WordApplication() } - + /// + /// 归还word + /// + /// public static void Return(WordApplication obj) { lock (pool) diff --git a/ChineseSubtitleConversionTool/bin/Debug/ChineseSubtitleConversionTool.exe b/ChineseSubtitleConversionTool/bin/Debug/ChineseSubtitleConversionTool.exe index f44b5611ae474debd72a08f5c78b477456e654c3..dafc39e55f1452dafe38eefd52e4e5d62a9ad4ae 100644 GIT binary patch delta 71 zcmV-N0J#5vkOqK|29SsZax4#^v5ef^5T$`?;cK>;MT}k0rnORTwX=BMgj)o3yMUmU dIsr5gvZE1{6HnDnyo