mshta 垂垂老矣,VBS 行将就木,昔日里用得还算广泛的这套神奇组合已经冷落在角落中。
然而,mshta 易于创建 UI 和 VBS 相对强大的能力,各种制作简单程序的人该用何替代呢?
好消息:PowerShell。
PowerShell 将 .Net 中各种对象都暴露出来可供调用,顺便把 GUI 那部分一块儿整出来并不很难。我们就这样在 PowerShell 中得到了 WPF 和 XAML 的支持。
于是你辛辛苦苦一顿编写……

恭喜你做出了一个十分复古的程序,能够勾起许多人的回忆
不满意?好吧再整整……

这几乎是 PowerShell 能够做到最好的了。但是我们仍然没有深色模式,没有外观原生一点的控件。
所以,当别人家 WinUI、React Native 等等一个接一个登上翻新的大船时,我们 PowerShell 有没有翻身的机会?
有……可能,新的基于 .Net Core 的 PowerShell 或许可以吃上新 UI,去装吧(x
实际上你不可能要求每个用户都这么做
换 mshta 上场,事情多少没那么复杂。只要细心仔细一点,把已有的资源多加利用,类 Fluent 的 UI 不用太多功夫就能做出来。
再看看别的方案。
.Net 9 就带来了 Fluent 2 的 WPF,不过系统自带 PowerShell 无福享受;
XAML Islands?也需要一个大大的外部库,而且 PowerShell 大概也用不了;
甚至有人做出了一个 WinUIShell 专门针对 PowerShell 适配,想法是很好的,但真的,但凡涉及到 Windows 中不内置的大号外部库,它真的不适合。
刚拷完逝没精力卖关子了,直接上解决方案:WPF UI。

简易效果。这玩意在 Nuget 那边标记的是最低依赖 .NETFramework 4.6.2,本来尝试的时候也不抱希望(记得 Windows PowerShell 基于 4.0 的来着?),但就是这么神奇,它可以。
从 Nuget 下载包。把wpf-ui.4.0.2.nupkg\lib\net462\下面的东西全部解出来,在 PowerShell 中调用Add-Type -Path [dll 路径]即可导入定义(还是命名空间?我也不很懂 C#)。
然后即可使用 PowerShell 风味的 C# 开始写代码,或使用Add-Type直接调用 C#,以及System.Windows.Markup.XamlReader调 XAML。
不知道是哪里的问题,官方给的一些方案是不生效的,这会导致包括但不限于 Mica 无法应用、深色模式无法应用等等问题。还有一些和 WinUI 本来就存在的差异,例如 ContentDialog 不在其它内容上方,和普通内容挤在同一层。不过,有 Workaround,如果想快速跳过坑的话来看看我的简陋示例吧:
这里我把 ContentDialog 塞到<popup>里面,还可以,只是 popup 本身的特性导致又产生了些 233。
那么,加上新外观我们需要付出多少代价?不要 5GB,不要 500MB,也不要 50MB,只要 5MB!对你没听错,就这么少!很轻量。想写点小 GUI 工具的确实可以试试。
就是这样。如果愿意,有人也可以帮我试试这方案最低能到哪里。