字体预览工具 v1.0.0 初始版本
This commit is contained in:
@@ -0,0 +1,313 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace FontPreview;
|
||||
|
||||
internal class SystemFontExportDialog : Form
|
||||
{
|
||||
private CheckedListBox lst;
|
||||
|
||||
private TextBox txtDir;
|
||||
|
||||
private Label lblSum;
|
||||
|
||||
private List<KeyValuePair<string, string>> fonts = new List<KeyValuePair<string, string>>();
|
||||
|
||||
public SystemFontExportDialog()
|
||||
{
|
||||
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_0054: Expected O, but got Unknown
|
||||
((Control)this).Text = "导出系统字体";
|
||||
((Control)this).Width = 680;
|
||||
((Control)this).Height = 560;
|
||||
((Form)this).StartPosition = (FormStartPosition)4;
|
||||
((Control)this).Font = new Font("Microsoft YaHei UI", 9f);
|
||||
Build();
|
||||
LoadFonts();
|
||||
}
|
||||
|
||||
private void Build()
|
||||
{
|
||||
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_0007: Expected O, but got Unknown
|
||||
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_0049: Expected O, but got Unknown
|
||||
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_0087: Expected O, but got Unknown
|
||||
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_00a0: Expected O, but got Unknown
|
||||
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_00d7: Expected O, but got Unknown
|
||||
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_010e: Expected O, but got Unknown
|
||||
//IL_0169: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_0170: Expected O, but got Unknown
|
||||
//IL_0191: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_019b: Expected O, but got Unknown
|
||||
//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_01bc: Expected O, but got Unknown
|
||||
//IL_0222: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_022c: Expected O, but got Unknown
|
||||
//IL_0280: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_0287: Expected O, but got Unknown
|
||||
//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_02ee: Expected O, but got Unknown
|
||||
Label val = new Label();
|
||||
((Control)val).Text = "勾选需要导出的系统字体(从注册表读取,含字体文件路径),导出的副本不会影响系统原字体。";
|
||||
((Control)val).SetBounds(12, 10, 650, 34);
|
||||
((Control)val).ForeColor = Color.DimGray;
|
||||
((Control)this).Controls.Add((Control)(object)val);
|
||||
lst = new CheckedListBox();
|
||||
((Control)lst).SetBounds(12, 48, 650, 320);
|
||||
lst.CheckOnClick = true;
|
||||
lst.ItemCheck += (ItemCheckEventHandler)delegate
|
||||
{
|
||||
UpdateSum();
|
||||
};
|
||||
((Control)this).Controls.Add((Control)(object)lst);
|
||||
Button val2 = new Button();
|
||||
((Control)val2).Text = "全选";
|
||||
((Control)val2).SetBounds(12, 376, 76, 28);
|
||||
((Control)val2).Click += delegate
|
||||
{
|
||||
for (int j = 0; j < lst.Items.Count; j++)
|
||||
{
|
||||
lst.SetItemChecked(j, true);
|
||||
}
|
||||
UpdateSum();
|
||||
};
|
||||
Button val3 = new Button();
|
||||
((Control)val3).Text = "全不选";
|
||||
((Control)val3).SetBounds(94, 376, 84, 28);
|
||||
((Control)val3).Click += delegate
|
||||
{
|
||||
for (int i = 0; i < lst.Items.Count; i++)
|
||||
{
|
||||
lst.SetItemChecked(i, false);
|
||||
}
|
||||
UpdateSum();
|
||||
};
|
||||
Button val4 = new Button();
|
||||
((Control)val4).Text = "刷新";
|
||||
((Control)val4).SetBounds(184, 376, 76, 28);
|
||||
((Control)val4).Click += delegate
|
||||
{
|
||||
LoadFonts();
|
||||
};
|
||||
((Control)this).Controls.Add((Control)(object)val2);
|
||||
((Control)this).Controls.Add((Control)(object)val3);
|
||||
((Control)this).Controls.Add((Control)(object)val4);
|
||||
Label val5 = new Label();
|
||||
((Control)val5).Text = "导出到:";
|
||||
((Control)val5).SetBounds(12, 414, 56, 26);
|
||||
txtDir = new TextBox();
|
||||
((Control)txtDir).SetBounds(66, 411, 476, 26);
|
||||
Button val6 = new Button();
|
||||
((Control)val6).Text = "浏览…";
|
||||
((Control)val6).SetBounds(548, 410, 100, 28);
|
||||
((Control)val6).Click += delegate
|
||||
{
|
||||
string text = NativeFolderDialog.PickFolder(((Control)this).Handle, "选择导出的目标目录", ((Control)txtDir).Text.Trim());
|
||||
if (text != null)
|
||||
{
|
||||
((Control)txtDir).Text = text;
|
||||
NormalizeDir();
|
||||
}
|
||||
};
|
||||
((Control)this).Controls.Add((Control)(object)val5);
|
||||
((Control)this).Controls.Add((Control)(object)txtDir);
|
||||
((Control)this).Controls.Add((Control)(object)val6);
|
||||
lblSum = new Label();
|
||||
((Control)lblSum).Text = "已选 0 / 0 个字体";
|
||||
((Control)lblSum).SetBounds(12, 448, 400, 20);
|
||||
((Control)lblSum).ForeColor = Color.FromArgb(43, 58, 85);
|
||||
((Control)this).Controls.Add((Control)(object)lblSum);
|
||||
Button val7 = new Button();
|
||||
((Control)val7).Text = "开始导出";
|
||||
((Control)val7).BackColor = Color.FromArgb(43, 58, 85);
|
||||
((Control)val7).ForeColor = Color.White;
|
||||
((ButtonBase)val7).FlatStyle = (FlatStyle)0;
|
||||
((Control)val7).SetBounds(12, 478, 130, 36);
|
||||
((Control)val7).Click += delegate
|
||||
{
|
||||
DoExport();
|
||||
};
|
||||
Button val8 = new Button();
|
||||
((Control)val8).Text = "关闭";
|
||||
val8.DialogResult = (DialogResult)2;
|
||||
((Control)val8).SetBounds(560, 478, 90, 36);
|
||||
((Control)this).Controls.Add((Control)(object)val7);
|
||||
((Control)this).Controls.Add((Control)(object)val8);
|
||||
((Form)this).AcceptButton = (IButtonControl)(object)val8;
|
||||
}
|
||||
|
||||
internal static string NormalizeDir(string s)
|
||||
{
|
||||
if (string.IsNullOrEmpty(s))
|
||||
{
|
||||
return s;
|
||||
}
|
||||
if (s.Length == 2 && s[1] == ':')
|
||||
{
|
||||
s += "\\";
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
private void LoadFonts()
|
||||
{
|
||||
//IL_0146: Unknown result type (might be due to invalid IL or missing references)
|
||||
fonts.Clear();
|
||||
try
|
||||
{
|
||||
string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.Fonts);
|
||||
using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts");
|
||||
if (registryKey != null)
|
||||
{
|
||||
string[] valueNames = registryKey.GetValueNames();
|
||||
Array.Sort(valueNames, (IComparer<string>?)StringComparer.OrdinalIgnoreCase);
|
||||
string[] array = valueNames;
|
||||
foreach (string text in array)
|
||||
{
|
||||
string text2 = registryKey.GetValue(text) as string;
|
||||
if (string.IsNullOrEmpty(text2))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
string extension = Path.GetExtension(text2);
|
||||
if (extension.Equals(".ttf", StringComparison.OrdinalIgnoreCase) || extension.Equals(".otf", StringComparison.OrdinalIgnoreCase) || extension.Equals(".ttc", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
string text3 = (Path.IsPathRooted(text2) ? text2 : Path.Combine(folderPath, text2));
|
||||
if (File.Exists(text3))
|
||||
{
|
||||
fonts.Add(new KeyValuePair<string, string>(text, text3));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show((IWin32Window)(object)this, "读取系统字体失败:" + ex.Message, "提示", (MessageBoxButtons)0, (MessageBoxIcon)48);
|
||||
}
|
||||
lst.Items.Clear();
|
||||
foreach (KeyValuePair<string, string> font in fonts)
|
||||
{
|
||||
lst.Items.Add((object)(font.Key + " —— " + Path.GetFileName(font.Value)), false);
|
||||
}
|
||||
UpdateSum();
|
||||
}
|
||||
|
||||
private void UpdateSum()
|
||||
{
|
||||
int num = 0;
|
||||
for (int i = 0; i < lst.Items.Count; i++)
|
||||
{
|
||||
if (lst.GetItemChecked(i))
|
||||
{
|
||||
num++;
|
||||
}
|
||||
}
|
||||
((Control)lblSum).Text = "已选 " + num + " / " + fonts.Count + " 个字体";
|
||||
}
|
||||
|
||||
private void NormalizeDir()
|
||||
{
|
||||
string text = ((Control)txtDir).Text.Trim().Trim(new char[1] { '"' });
|
||||
if (text.Length == 2 && text[1] == ':')
|
||||
{
|
||||
text += "\\";
|
||||
}
|
||||
((Control)txtDir).Text = text;
|
||||
}
|
||||
|
||||
private void DoExport()
|
||||
{
|
||||
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_031f: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
|
||||
string text = ((Control)txtDir).Text.Trim().Trim(new char[1] { '"' });
|
||||
if (text.Length == 0)
|
||||
{
|
||||
MessageBox.Show((IWin32Window)(object)this, "请先选择导出目录", "提示");
|
||||
return;
|
||||
}
|
||||
string text2 = text;
|
||||
if (MainForm.DiagnosePath(text2) != null)
|
||||
{
|
||||
string text3 = MainForm.DriveToUnc(text2);
|
||||
if (text3 == null || !MainForm.TryReconnect(text2) || MainForm.DiagnosePath(text2) != null)
|
||||
{
|
||||
if (text3 == null || MainForm.DiagnosePath(text3) != null)
|
||||
{
|
||||
MessageBox.Show((IWin32Window)(object)this, "目标目录不可访问:" + text, "提示", (MessageBoxButtons)0, (MessageBoxIcon)48);
|
||||
return;
|
||||
}
|
||||
text2 = text3;
|
||||
}
|
||||
}
|
||||
int num = 0;
|
||||
int num2 = 0;
|
||||
int num3 = 0;
|
||||
List<string> list = new List<string>();
|
||||
List<string> list2 = new List<string>();
|
||||
for (int i = 0; i < lst.Items.Count; i++)
|
||||
{
|
||||
if (!lst.GetItemChecked(i))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
num++;
|
||||
string value = fonts[i].Value;
|
||||
try
|
||||
{
|
||||
string text4 = Path.Combine(text2, Path.GetFileName(value));
|
||||
if (!File.Exists(value))
|
||||
{
|
||||
list.Add(value);
|
||||
continue;
|
||||
}
|
||||
if (File.Exists(text4))
|
||||
{
|
||||
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(value);
|
||||
string extension = Path.GetExtension(value);
|
||||
int num4 = 1;
|
||||
string text5 = text4;
|
||||
while (File.Exists(text5))
|
||||
{
|
||||
text5 = Path.Combine(text2, fileNameWithoutExtension + "_" + num4 + extension);
|
||||
num4++;
|
||||
}
|
||||
text4 = text5;
|
||||
}
|
||||
File.Copy(value, text4, overwrite: false);
|
||||
num2++;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
list2.Add(value);
|
||||
}
|
||||
}
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
stringBuilder.Append("导出完成:成功 " + num2 + " / " + num + " 个\r\n");
|
||||
if (num3 > 0)
|
||||
{
|
||||
stringBuilder.Append("跳过 " + num3 + " 个\r\n");
|
||||
}
|
||||
if (list.Count > 0)
|
||||
{
|
||||
stringBuilder.Append("源文件缺失 " + list.Count + " 个\r\n");
|
||||
}
|
||||
if (list2.Count > 0)
|
||||
{
|
||||
stringBuilder.Append("失败 " + list2.Count + " 个\r\n");
|
||||
}
|
||||
stringBuilder.Append("\r\n目标目录: " + text2);
|
||||
MessageBox.Show((IWin32Window)(object)this, stringBuilder.ToString(), "导出结果", (MessageBoxButtons)0, (MessageBoxIcon)64);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user