Показать полную графическую версию : Программка или скрипт для вывода сообщения, как у Метро-приложений
severagent007
29-11-2015, 01:02
Использую фильтр записи UWF, при заполнении оверлея в озу комп зависает наглухо. До этого таких неприятностей не было, т.к сама виндовс может работать очень долго, когда все записи на системный диск перенаправляются фильтром в озу-оверлей размером в 1024 мб, если только ошибочно не скопировать что-то объёмом больше 1 гб на С:
Но есть всё-таки моменты приводящие к зависанию и ресету компа, когда я не виноват: например Медиа креатион тулс - указал куда скачивать образ (4 гб) на другой диск, не защищённый фильтром UWF, ушёл пить чай - пришёл скачано 39% и комп благополучно висит мертво - я же не знал, что утилита всё равно качает его на С: (так и не понял куда) а при завершении скачки и, наверное проверки суммы - перемещает его на указанный диск. То есть качалось на С: т.е в озу, а размер оверлея в озу установлен 1 гб и при заполнении комп завис. Фильтр записывает сообщение в журнал событий, его можно настроить , например превышении оверлея озу в 512 мб, когда ещё не поздно остановить тот же Медиа кр тулс или случайное копирование больших файлов на С: Но в журнал же не будешь постоянно смотреть и рефрешить его, это невозможно. Или извлечение из архива перетаскиванием мышью файла - распаковывает его сначала в C:\Users\...\AppData\Local\Temp на С, а только потом перемещает в указанную папку, а если файл больше 1 гб, и забыл, что нельзя перетаскивать, (а надо юзать кнопку "Извлечь") - привет ресет.
Короче, создал задание в планировщике в ответ на событие uwf warning 512 mb write! но задача не создаётся с действием "Вывод сообщения" - говорит устаревшая возможность, но это ладно - можно задать запуск скрипта или программки. Только вот как сделать скрипт или программку, чтобы выводилось сообщение как у Метро-приложений, тот же Нюторрент выводит их возле часов, красивое окошко в метро стиле. Очень хочу тоже такое сообщение сделать, только как? Помогите, пожалуйста.
тот же Нюторрент выводит их возле часов, »
NirCmd/PowerShell.
severagent007
29-11-2015, 03:05
NirCmd/PowerShell » есть эти утилиты, первой пользуюсь для запуска приложений от имени системы. Скрипт какой к ним нужен или программа? Чтобы можно было запустить через планировщик, задание сделать смогу... а что запускать-то в задании?
NirCmd - trayballoon (http://www.nirsoft.net/utils/nircmd2.html#trayballoon)
Windows PowerShell Tip: Displaying a Message in the Notification Area (https://technet.microsoft.com/en-us/library/ff730952.aspx)
Correctly Showing Balloon Tips (http://www.powertheshell.com/balloontip/)
и т.п.
severagent007
29-11-2015, 12:43
Iska, Большое спасибо! Даже гуглить толком не умею...
Хм... даже не подозревал, что у ниркмд есть такая возможность, думал он только серьёзными вещами занимается :). С повер шелл немного не разобрался, вот один скрипт сработал (средняя ссылка), но как убрать окно появляющееся повер шелла?
И по последней ссылке там, как я понял без иконки в трее работает скрипт? Я не смог его заставить работать... Смотрю на него, как баран на новые ворота, почему он не работает? Как его правильно сделать скрипт? Вот он:
function Show-BalloonTip
{
[CmdletBinding(SupportsShouldProcess = $true)]
param
(
[Parameter(Mandatory=$true)]
$Text,
[Parameter(Mandatory=$true)]
$Title,
[ValidateSet('None', 'Info', 'Warning', 'Error')]
$Icon = 'Info',
$Timeout = 10000
)
Add-Type -AssemblyName System.Windows.Forms
if ($script:balloon -eq $null)
{
$script:balloon = New-Object System.Windows.Forms.NotifyIcon
}
$path = Get-Process -id $pid | Select-Object -ExpandProperty Path
$balloon.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balloon.BalloonTipIcon = $Icon
$balloon.BalloonTipText = $Text
$balloon.BalloonTipTitle = $Title
$balloon.Visible = $true
$balloon.ShowBalloonTip($Timeout)
}
и ещё дописано:
After running the function, simply use it like this:
PS> Show–BalloonTip –Text 'Script has retrieved data' –Title 'All is fine' –Icon Info –Timeout 5000 -вот это не понял куда его?
PS>
You have to call its method Dispose() to actually remove it from the tray bar. So you can do this from script:
PS> $script:balloon.Dispose()
PS>
The icon will immediately be removed from the tray area. But when you try and show another balloon, you will get an error now – the function just checks whether there is a shared variable called "balloon" and tries and reuses the icon.
Since you have disposed it, it no longer works. So when you do want to dispose the tray icon, make sure you also dispose your variable:
PS> $script:balloon.Dispose()
PS> Remove–Variable –Scope script –Name balloon
PS>
что тут куда... скрипты разрешил выполнение командой сет ексекутив в повер шел, создал файл с расширением ps1, но он не работает...
а такой запускается скрипт, задачу сделал, в принципе всё устраивает, кроме моргающего окна PowerShell и таймаута:
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$objNotifyIcon = New-Object System.Windows.Forms.NotifyIcon
$objNotifyIcon.Icon = "C:\Scripts\Forms\Folder.ico"
$objNotifyIcon.BalloonTipIcon = "Error"
$objNotifyIcon.BalloonTipText = "A file needed to complete the operation could not be found."
$objNotifyIcon.BalloonTipTitle = "File Not Found"
$objNotifyIcon.Visible = $True
$objNotifyIcon.ShowBalloonTip(10000)
но опосля его работы висит иконка в трее... хотя пускай висит, это очень хорошо, т.к уведомление через 5 сек исчезает, хоть ты тресни, при любом таймауте... хоть и написано до 30 сек, но это в десятке уже наверно изменили.
Я, конешно, извиняюсь за наглость, и так за меня гуглили... ещё хотел узнать, может кто знает какой таймаут поставить, чтобы окно уведомления не скрывалось вообще, только кликом по крестику ведь уведомления центра безопасности не исчезают...
-WindowStyle Hidden -file C:\Scripts\MyScript.ps1 в PowerShell 2.0 это должно убирать окно консоли, хоть и быстрее, но оно всё равно моргает. Наверно очень мощная видеокарта у меня, быстрее рисует, чем винда сообразит :dirol:
Вроде как можно обновлять уведомление, тогда оно будет постоянно, по-идее, висеть до закрытия мышкой, но как это сделать пока не придумал, тем более всё привязано к шедулеру, вот пример скрипта обновляемого уведомления, при условии, что скрипт не завершает работу:
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$objNotifyIcon = New-Object System.Windows.Forms.NotifyIcon
$objNotifyIcon.Icon = "C:\Scripts\Forms\Folder.ico"
$objNotifyIcon.BalloonTipIcon = "Info"
$objNotifyIcon.BalloonTipText = "Retrieving files from C:\Windows."
$objNotifyIcon.BalloonTipTitle = "Retrieving Files"
$objNotifyIcon.Visible = $True
$objNotifyIcon.ShowBalloonTip(10000)
Get-ChildItem C:\Windows
$objNotifyIcon.BalloonTipText = "The script has finished running."
$objNotifyIcon.BalloonTipTitle = "Files retrieved."
$objNotifyIcon.Visible = $True
$objNotifyIcon.ShowBalloonTip(10000)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.