Показать полную графическую версию : [решено] иконка с обновляемой информацией в трее посредством PowerShell / VBS
kfawkes0
01-08-2021, 13:12
как сделать посредством PowerShell / VBS / WSH / C# (C# в PowerShell) иконку в трее с динамически обновляемой (отображаемой) информацией в стиле, к примеру, qBittorrent?
powershell create tray notify - Поиск в Google (https://www.google.com/search?q=powershell+create+tray+notify).
kfawkes0
01-08-2021, 19:48
и вправду поискав в Google я сумел найти то необходимое, для решение моей задачи (ну, почти. я не смог найти отображение сообщения в реальном времени)
вот пример реализации моей задачи (чтобы оно считалось решением, так как запрос в Google хоть и был полезен, но результаты могут измениться через время):
* это PowerShell в MS-DOS batch; для работы требуется файл 'example.ico' на рабочем столе пользователя.
@set ".trayfrms.t_f=%LocalAppData%\Temp\trayfrms"
@call :source.ps1.systray-menu >"%.trayfrms.t_f%.ps1"
@call :script.ps1 "%.trayfrms.t_f%.ps1"
@goto END.
:script.ps1
@call "%WinDir%\System32\WindowsPowerShell\v1.0\PowerShell.EXE" -ExecutionPolicy ByPass -File %*
@goto EXIT
:source.ps1.systray-menu
@echo [void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
@echo.
@echo $STForm = New-Object System.Windows.Forms.form
@echo $NotifyIcon = New-Object System.Windows.Forms.NotifyIcon
@echo $ContextMenu = New-Object System.Windows.Forms.ContextMenu
@echo $MenuItem = New-Object System.Windows.Forms.MenuItem
@echo $MenuItem2 = New-Object System.Windows.Forms.MenuItem
@echo $MenuItem3 = New-Object System.Windows.Forms.MenuItem
@echo $Timer = New-Object System.Windows.Forms.Timer
@echo $HealthyIcon = New-Object System.Drawing.Icon("$env:USERPROFILE\Desktop\example.ico")
@echo $UnhealthyIcon = New-Object System.Drawing.Icon("$env:USERPROFILE\Desktop\example.ico")
@echo.
@echo $STForm.ShowInTaskbar = $false
@echo $STForm.WindowState = "minimized"
@echo.
@echo $NotifyIcon.Icon = $HealthyIcon
@echo $NotifyIcon.ContextMenu = $ContextMenu
@echo $NotifyIcon.ContextMenu.MenuItems.AddRange($MenuItem)
@echo $NotifyIcon.ContextMenu.MenuItems.AddRange($MenuItem2)
@echo $NotifyIcon.ContextMenu.MenuItems.AddRange($MenuItem3)
@echo $NotifyIcon.Visible = $True
@echo.
@echo # We need to avoid using Start-Sleep as this freezes the GUI. Instead, we'll utilitse the .NET forms timer, it repeats a function at a set interval.
@echo $Timer.Interval = 300000 # (5 min)
@echo $Timer.add_Tick({ Load-Config })
@echo $Timer.start()
@echo.
@echo # This will appear as a right click option on the system tray icon
@echo $MenuItem.Index = 0
@echo $MenuItem.Text = "Exit"
@echo $MenuItem.add_Click({
@echo $Timer.Stop()
@echo $NotifyIcon.Visible = $True
@echo $STForm.close()
@echo })
@echo.
@echo $MenuItem2.Index = 0
@echo $MenuItem2.Text = "Open notepad.exe"
@echo $MenuItem2.add_Click({
@echo $Timer.Stop()
@echo $NotifyIcon.Visible = $True
@echo Start-Process notepad.exe
@echo $STForm.close()
@echo })
@echo.
@echo $MenuItem3.Index = 0
@echo $MenuItem3.Text = "Open notepad.exe (no exit)"
@echo $MenuItem3.add_Click({
@echo $Timer.Stop()
@echo $NotifyIcon.Visible = $True
@echo Start-Process notepad.exe
@echo })
@echo.
@echo function Load-Config
@echo {
@echo #Get-Content some Data from a file here
@echo if ($warn)
@echo {
@echo $NotifyIcon.Icon = $UnhealthyIcon
@echo $NotifyIcon.ShowBalloonTip(30000, "Attention!", "Some data from a file here...", [system.windows.forms.ToolTipIcon]"Warning")
@echo Remove-Variable warn
@echo }
@echo else
@echo {
@echo $NotifyIcon.Icon = $HealthyIcon
@echo }
@echo }
@echo.
@echo Load-Config
@echo [void][System.Windows.Forms.Application]::Run($STForm)
@goto EXIT
:END.
@if NOT defined .trayfrms.t_f (@goto EXIT)
@del /q /f "%LocalAppData%\Temp\trayfrms*" >NUL 2>NUL.
@set ".trayfrms.t_f="
:EXIT
для получения чистого PowerShell кода надо использовать в начале файла:
@set ".trayfrms.t_f=%LocalAppData%\Temp\trayfrms"
@call :source.ps1.systray-menu
@goto END.
…в MS-DOS batch »
Нет там никакого MS-DOS. Консоль во всех версиях NT — обычное Windows-приложение.
Если Вам нужно простое отображение именно из-под консоли — возьмите NirCmd: NirCmd - Freeware command-line tool for Windows, trayballoon (https://www.nirsoft.net/utils/nircmd2.html#trayballoon).
Serguei Kouzmine
02-08-2021, 17:26
@kfawkes0 вам все еще нужно это ?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.