下载
https://files.1fav.org/s/pY2HN
首先声明这个软件的原作者不是我,我只是二次开发了,原作者是D9论坛的Gpower2
改了什么,没兴趣可以不看.
20250216
1.给仅展开新文件的选项添加到配置文件,可以自动记住
20250214
1.给主界面增加了几个按钮,我拖入个剧集,尼玛界面被拉的N长,原作者估计是没考虑到别人会批量提取吧..
2.把昨天去掉的几个异常处理的代码修改了下加回去了..当时估计是让烟熏了眼,多注释了几行...
3.又是几根烟之后,发现了个小bug,如果文件数量大于1,文件图标在折叠再展开的情况下会有出现错误的问题.然后顺便把文件图标按钮移动到主界面了
20250213修改记录
1.去掉了停止任务的弹出提醒,多此一举
2.修改了几处字符串
3.给轨道加了几个简单的图标,加起来10KB左右,还好,能接受的范围内..主要这样更加容易分辨.
4.过了5分钟抽了一根烟,想了想,万一有人不喜欢这个图标呢,加了一个图标开关.自由控制,无需重启,实时生效.
原本是想修改掉它的界面,自己重构UI的,但是看了看自己做的软件,界面也和这人做的大差不差,于是界面基本没改动,改动了很多代码层面的东西,原作者是.NET4.0,到我这里项目变成了.NET4.8,去掉了很多看起来很繁杂的逻辑,优化了工具目录的加载逻辑,现在是优先从配置文件加载,如果没有,则从同级目录和同级子目录中自动搜索.看下图:
if (manualMkvToolNixPath && !manualPathOK)
{
gMKVLogger.Log(string.Format("无法加载工具路径!尝试自动检测..."));
}
if (!manualMkvToolNixPath || (manualMkvToolNixPath && !manualPathOK))
{
// Find MKVToolnix path
try
{
bool found = false;
// 1. 首先检查配置文件中保存的路径
if (File.Exists(Path.Combine(_Settings.MkvToolnixPath, gMKVHelper.MKV_MERGE_GUI_FILENAME))
|| File.Exists(Path.Combine(_Settings.MkvToolnixPath, gMKVHelper.MKV_MERGE_NEW_GUI_FILENAME)))
{
gMKVLogger.Log("在配置文件保存的路径中已找到 mkvmerge...");
_FromConstructor = true;
txtMKVToolnixPath.Text = _Settings.MkvToolnixPath;
_FromConstructor = false;
found = true;
}
// 2. 检查当前目录
if (!found && (File.Exists(Path.Combine(GetCurrentDirectory(), gMKVHelper.MKV_MERGE_GUI_FILENAME))
|| File.Exists(Path.Combine(GetCurrentDirectory(), gMKVHelper.MKV_MERGE_NEW_GUI_FILENAME))))
{
gMKVLogger.Log("在当前目录中找到 mkvmerge...");
txtMKVToolnixPath.Text = GetCurrentDirectory();
found = true;
}
// 3. 检查当前目录下的子文件夹
if (!found)
{
string[] subDirs = Directory.GetDirectories(GetCurrentDirectory());
foreach (string dir in subDirs)
{
if (File.Exists(Path.Combine(dir, gMKVHelper.MKV_MERGE_GUI_FILENAME))
|| File.Exists(Path.Combine(dir, gMKVHelper.MKV_MERGE_NEW_GUI_FILENAME)))
{
gMKVLogger.Log($"在子文件夹 {Path.GetFileName(dir)} 中找到 mkvmerge...");
txtMKVToolnixPath.Text = dir;
found = true;
break;
}
}
}
// 4. 最后检查系统路径(注册表或/usr/bin)
if (!found)
{
if (!gMKVHelper.IsOnLinux)
{
gMKVLogger.Log("在本地目录未找到 mkvmerge,正在检查注册表...");
txtMKVToolnixPath.Text = gMKVHelper.GetMKVToolnixPathViaRegistry();
}
else
{
if (File.Exists(Path.Combine("/usr", "bin", gMKVHelper.MKV_MERGE_GUI_FILENAME))
|| File.Exists(Path.Combine("/usr", "bin", gMKVHelper.MKV_MERGE_NEW_GUI_FILENAME)))
{
txtMKVToolnixPath.Text = Path.Combine("/usr", "bin");
}
else
{
throw new Exception(string.Format("未在路径 {0} 中找到 mkvmerge!", Path.Combine("usr", "bin")));
}
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex);
gMKVLogger.Log(ex.Message);
string exceptionMessage = gMKVHelper.IsOnLinux
? "在配置文件、当前目录及其子文件夹中找不到 MKVToolNix,也不在 /usr/bin 中!"
: "在配置文件、当前目录及其子文件夹中找不到 MKVToolNix,也不在注册表中!";
gMKVLogger.Log(exceptionMessage);
throw new Exception(exceptionMessage + Environment.NewLine + "请下载并重新安装,或手动指定路径!");
}
}
再就是做了大量的代码优化,这就不贴出来了,然后主界面上的进度条在不工作的时候改成了不显示,不然左下角一个空缺看着不舒服,添加了一个关闭软件时,最小化到托盘区域的功能,后面看兴趣吧,如果有兴趣和有必要,我看要不要把软件改成多任务同时进行的,以提高提取效率.虽然我已经优化了相关代码..然后我不喜欢软件目录和什么配置文件以及DLL文件全部都放在一起,我喜欢层级感,所以DLL文件和配置文件同一移动到了Config
目录中,然后我编译的DLL文件名字改成了MKVExtractCore.dll
,其他的改动想不起来了...
1 条评论
666OωO