Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Программка или скрипт для вывода сообщения, как у Метро-приложений (http://forum.oszone.net/showthread.php?t=308549)

severagent007 29-11-2015 01:02 2579728

Программка или скрипт для вывода сообщения, как у Метро-приложений
 
Использую фильтр записи UWF, при заполнении оверлея в озу комп зависает наглухо. До этого таких неприятностей не было, т.к сама виндовс может работать очень долго, когда все записи на системный диск перенаправляются фильтром в озу-оверлей размером в 1024 мб, если только ошибочно не скопировать что-то объёмом больше 1 гб на С:
Но есть всё-таки моменты приводящие к зависанию и ресету компа, когда я не виноват: например Медиа креатион тулс - указал куда скачивать образ (4 гб) на другой диск, не защищённый фильтром UWF, ушёл пить чай - пришёл скачано 39% и комп благополучно висит мертво - я же не знал, что утилита всё равно качает его на С: (так и не понял куда) а при завершении скачки и, наверное проверки суммы - перемещает его на указанный диск. То есть качалось на С: т.е в озу, а размер оверлея в озу установлен 1 гб и при заполнении комп завис. Фильтр записывает сообщение в журнал событий, его можно настроить , например превышении оверлея озу в 512 мб, когда ещё не поздно остановить тот же Медиа кр тулс или случайное копирование больших файлов на С: Но в журнал же не будешь постоянно смотреть и рефрешить его, это невозможно. Или извлечение из архива перетаскиванием мышью файла - распаковывает его сначала в C:\Users\...\AppData\Local\Temp на С, а только потом перемещает в указанную папку, а если файл больше 1 гб, и забыл, что нельзя перетаскивать, (а надо юзать кнопку "Извлечь") - привет ресет.
Короче, создал задание в планировщике в ответ на событие uwf warning 512 mb write! но задача не создаётся с действием "Вывод сообщения" - говорит устаревшая возможность, но это ладно - можно задать запуск скрипта или программки. Только вот как сделать скрипт или программку, чтобы выводилось сообщение как у Метро-приложений, тот же Нюторрент выводит их возле часов, красивое окошко в метро стиле. Очень хочу тоже такое сообщение сделать, только как? Помогите, пожалуйста.

Iska 29-11-2015 02:21 2579749

Цитата:

Цитата severagent007
тот же Нюторрент выводит их возле часов, »

NirCmd/PowerShell.

severagent007 29-11-2015 03:05 2579754

Цитата:

Цитата Iska
NirCmd/PowerShell »

есть эти утилиты, первой пользуюсь для запуска приложений от имени системы. Скрипт какой к ним нужен или программа? Чтобы можно было запустить через планировщик, задание сделать смогу... а что запускать-то в задании?

Iska 29-11-2015 03:32 2579755

NirCmd - trayballoon

Windows PowerShell Tip: Displaying a Message in the Notification Area
Correctly Showing Balloon Tips
и т.п.

severagent007 29-11-2015 12:43 2579805

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)



Время: 10:07.

Время: 10:07.
© OSzone.net 2001-