powershell脚本写一个托盘图标

1、准备ico格式图标

star_bethlehem_icon
powershell脚本写一个托盘图标_第1张图片
文件名改为star.ico

2、安装VSCode

如何下载安装VSCode
扩展:PowerShell扩展

3、创建项目

1、运行PowerShell命令

mkdir trayicon_ps1;cd trayicon_ps1;New-Item trayicon.ps1;code .

2、将star.ico放入trayicon_ps1文件夹

4、修改trayicon.ps1的编码

选择文件trayicon.ps1
点击右下角UTF-8
powershell脚本写一个托盘图标_第2张图片
选择通过编码保存
powershell脚本写一个托盘图标_第3张图片
选择UTF-8 with BOM
powershell脚本写一个托盘图标_第4张图片

5、编辑trayicon.ps1

# 脚本文件编码为UTF8 with BOM才能支持中文

# 加载WinForms程序集
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName PresentationFramework

# 图标文件路径要使用完整的路径。
$iconPath = "$(Get-Location)/star.ico"
$tooltip = "这是文字"

# 右键菜单
$contextMenu = [System.Windows.Forms.ContextMenuStrip]::new()

$menuItemMsg = [System.Windows.Forms.ToolStripMenuItem]::new()
$menuItemMsg.Text = "弹出消息框"
$menuItemMsg.add_Click({ [System.Windows.MessageBox]::Show('这是消息框') })
$null = $contextMenu.Items.Add($menuItemMsg)

$menuItemExit = [System.Windows.Forms.ToolStripMenuItem]::new()
$menuItemExit.Text = "退出"
$menuItemExit.add_Click({ $script:done = $true }) # 单击菜单项时,将$done设置为$true。
$null = $contextMenu.Items.Add($menuItemExit)

# 构造NotifyIcon对象。
$notifyIcon = [System.Windows.Forms.NotifyIcon]::new()
$notifyIcon.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($iconPath)
$notifyIcon.Text = $tooltip
$notifyIcon.Visible = $true
$notifyIcon.ContextMenuStrip = $contextMenu
$notifyIcon.add_Click({ 
    param($evtSender, $evtArgs)
    if ($evtArgs.Button -eq [System.Windows.Forms.MouseButtons]::Left){
        [System.Windows.MessageBox]::Show("单击了图标")
    }
})

# 定义一个变量,该变量表示是否应退出脚本,并从add_Click()事件处理程序设置为$true。
$done = $false

Write-Verbose -Verbose @"
Adding a PowerShell icon to notification area (system tray).
Use the icon's context menu to quit this script, 
or press Ctrl-C in the console window.
"@

# Loop
try {
    while (-not $done) {
        # 使WinForms处理其事件。
        [System.Windows.Forms.Application]::DoEvents()
        # 睡一会儿,保持用户界面的响应。
        # 理论上可以在这里执行其他任务,只要它们快速完成,以便仍然允许足够频繁的DoEvents()调用。
        Start-Sleep -MilliSeconds 100
    }
}
finally {
    # 处理通知图标,删除图标。
    $notifyIcon.Dispose()
    Write-Verbose -Verbose 'Exiting.'
}

6、最终效果

点击右上角三角图标运行脚本
powershell脚本写一个托盘图标_第5张图片
鼠标悬浮效果
powershell脚本写一个托盘图标_第6张图片
鼠标单击效果
powershell脚本写一个托盘图标_第7张图片
鼠标右键效果
powershell脚本写一个托盘图标_第8张图片
弹出消息框按钮效果
powershell脚本写一个托盘图标_第9张图片
退出按钮就是退出,没啥效果

7、不显示powershell窗口的方式

新建start.vbs

set ws=createobject("wscript.shell")
ws.Run "powershell.exe .\trayicon.ps1" , 0, False

双击运行即可

你可能感兴趣的:(PowerShell,windows,NotifyIcon,c#,vbs)