PowerShell: Märten Rodes, vlc.ps1

From ICO wiki

<source lang="powershell">

<#

.SYNOPSIS

   Skript käivitab VLC Media Playeris internetiraadio ja sulgeb selle, kui arvuti lukustatakse.

.DESCRIPTION

   Skript jookseb taustal ja avab automaatselt VLC Media Playeriga internetiraadio, kui arvuti
   ei ole lukus või kui arvuti tehakse lukust lahti.
   VLC suletakse, kui arvuti pannakse lukku.

.VERSION

   2.0

.NOTES

   Autor: Märten Rodes, AK31
  1. >
  1. Importida DLL-failist protseduur akna minimeerimiseks

$import = '[DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);' Add-Type -MemberDefinition $import -name NativeMethods -namespace Win32

function Stop-VLC {

  1. Sulgeda VLC Media Player
   foreach($proc in Get-Process vlc*){$proc.CloseMainWindow()}

}

function Start-VLC {

   # Käivitada VLC Media Player
   Start-Process "C:\Program Files\VideoLAN\VLC\vlc.exe" http://icecast.linxtelecom.com:8000/mania.mp3.m3u
   # Leida VLC Media Player'i protsessi akna handle. Kui aken pole veel avanenud, siis oodata.
   do {
       # Oodata, kui aken pole veel avanenud
       Start-Sleep -Milliseconds 100
       # Leida VLC Media Player'i protsessi akna handle
       foreach($proc in Get-Process vlc*){
           $handle = $proc.MainWindowHandle
       }
   }
   # Korrata, kuni handle on leitud
   until ($handle -as [int] -gt 0)
   # Minimeerida aken
   [Win32.NativeMethods]::ShowWindowAsync($handle, 2)

}

  1. Käivitamisel suletakse VLC

Stop-VLC $state = 'WAITING'

  1. Põhitsükkel kontrollib iga 0,5 sekundi tagant, kas arvuti on lukku pandud või lahti tehtud.
  2. Vajadusel käivitab või seiskab raadio

while ($true) {

   Start-Sleep -Milliseconds 500
   $locked = $false
   foreach($proc in Get-Process LogonUI*){
       $locked = $true
   }
   # Kui arvuti on lukus ja VLC töötab, siis lülitada see välja
   if (($locked -eq $true) -and ($state -eq 'RUNNING')) {
       Stop-VLC
       $state = 'WAITING'
   }
   # Kui arvuti ei ole lukus, aga VLC ei tööta, siis käivitada VLC
   elseif (($locked -eq $false) -and ($state -eq 'WAITING')) {
       Start-VLC
       $state = 'RUNNING'
   }

}