前言
在win10上,有很多类番茄钟的提醒应用,我就想着能否在终端中自己实现,经过一番折腾后,实现了自给自足的效果(但是需要本地装.net开发包),所以不想折腾但又想在终端上使用的朋友,建议下载 BurntToast 包直接食用
实际代码加个人注释
function New-ToastNotification
{
param
(
[String] $waitTime,
[String] $FirstLine = '休息时间到啦',
[Parameter(Mandatory = $false)]
[ValidateSet('ToastImageAndText01',
'ToastImageAndText02',
'ToastImageAndText03',
'ToastImageAndText04',
'ToastText01',
'ToastText02',
'ToastText03',
'ToastText04')]
[String] $Template = 'ToastText03'
)
[xml]$ToastTemplate = ([Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::$Template)).GetXml()
# 上文输出结构:<toast><visual><binding template="ToastText03"><text id="1"></text><text id="2"></text></binding></visual></toast>
$TextElements = $ToastTemplate.GetElementsByTagName('text')
foreach ($TextElement in $TextElements)
{
switch ($TextElement.id)
{
# 如果是 1 则执行,$null的存在意义是避免输出结构到终端
'1' { $null = $TextElement.AppendChild($ToastTemplate.CreateTextNode($FirstLine)) }
}
}
$ToastXml = New-Object -TypeName Windows.Data.Xml.Dom.XmlDocument
$ToastXml.LoadXml($ToastTemplate.OuterXml)
$AppId = '{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe'
if($waitTime) {
Start-Sleep $waitTime
}
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($AppId).Show($ToastXml)
}
#调用方法
New-ToastNotification
总结
pwsh7能直接运行c#语法后,对于开发者而言,确实方便了很多,像上文的个人代码,直接调用了 uwp的 ui和方法,而不用编译成二进制
扩展阅读
ToastTemplateType 枚举
官网地址:learn.microsoft.com/zh-cn/uwp/a…
静态成员运算符::
调用.net框架类的静态属性和方法。要找到对象的静态属性和方法,请使用Get-Member cmdlet的静态参数。成员名可以是一个表达式。