PowerShell: Desktopile info kuvamine

From ICO wiki
Revision as of 18:07, 20 February 2012 by Sarnus (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search
<#
 
.SYNOPSIS
 Kuvab taustapildile arvutinime, kasutajanime ja ip aadressid.
 Taustapildi saab ette anda. 
 Kui pilti ette ei anta ja taustapilti pole varem skriptist läbi lastud, siis kirjutab andmed olemasolevale pildile.
 Kui skript on juba taustapildile andmed kirjutanud ja käivitatakse skript uuesti ilma uue pildi asukohata, siis kuvatakse must taust andmetega.
 
.DESCRIPTION
  Võimalik on anda olemasoleva pildi asukoht ja kuvamise stiil.
  Stiilid on: Tile, Center, Stretch
 
.Example
  C:\PS> .\skript.ps1
  C:\PS> .\skript.ps1 -Path "C:\Users\Kasutaja\pilt.jpg"
  C:\PS> .\skript.ps1 -Path "C:\Users\Kasutaja\pilt.jpg" -Style "Stretch"
 
.NOTES
  Autor: Sander Arnus
  Versioon: 0.1
  Muutmise kuup2ev 19.02.2012
 
.LINK
  https://wiki.itcollege.ee/index.php/PowerShell:_Desktopile_info_kuvamine
 
 
#>

#Parameetrid, pildi asukoht ja kuvamise stiil
Param(
        [string] $Path,
        [string] $Style = "NoChange")
        
# Funktsioon mis muudab taustapildi ära
function Muudataust
{

BEGIN {
try {
   $WP = [Wallpaper.Setter]
} catch {
   Add-Type @"
using System;
using System.Runtime.InteropServices;
using Microsoft.Win32;
namespace Wallpaper
{
   public enum Style : int
   {
       Tile, Center, Stretch, NoChange
   }

   public class Setter {
      public const int SetDesktopWallpaper = 20;
      public const int UpdateIniFile = 0x01;
      public const int SendWinIniChange = 0x02;

      [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
      private static extern int SystemParametersInfo (int uAction, int uParam, string lpvParam, int fuWinIni);
      
      public static void SetWallpaper ( string path, Wallpaper.Style style ) {
         SystemParametersInfo( SetDesktopWallpaper, 0, path, UpdateIniFile | SendWinIniChange );
         
         RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true);
         switch( style )
         {
            case Style.Stretch :
               key.SetValue(@"WallpaperStyle", "2") ; 
               key.SetValue(@"TileWallpaper", "0") ;
               break;
            case Style.Center :
               key.SetValue(@"WallpaperStyle", "1") ; 
               key.SetValue(@"TileWallpaper", "0") ; 
               break;
            case Style.Tile :
               key.SetValue(@"WallpaperStyle", "1") ; 
               key.SetValue(@"TileWallpaper", "1") ;
               break;
            case Style.NoChange :
               break;
         }
         key.Close();
      }
   }
}
"@
    $WP = [Wallpaper.Setter]
}
}
PROCESS {
$WP::SetWallpaper( $Path, $Style)
echo $Path
echo $Style
echo $pikkus
echo $laius
echo $korgus
echo $kaugus
}

}

[Reflection.Assembly]::LoadWithPartialName("System.Drawing") | Out-Null

# Koht kuhu salvestame taustapildi
$imgurl = "$ENV:tmp\wallpaper.jpg"

#Funktsioon, mis väljastab kõik arvuti ip aadressid
Function Get-IPAddresses
{ 
$Computer = "." 
$IPConfigSet = Get-WmiObject Win32_NetworkAdapterConfiguration 

$count = 0
foreach ($IPConfig in $IPConfigSet) { 
   if ($Ipconfig.IPAddress) { 
      foreach ($addr in $Ipconfig.IPAddress) { 
      "IP Aadress: {0}" -f  $addr; 
      $count++  
      } 
   } 
} 
if ($count -eq 0) {"No IP addresses found"} 
}

# Arvuti nimi
$PC=Get-Content Env:\COMPUTERNAME
 
# Kasutajanimi
$USER=Get-Content Env:\USERNAME
 
# IP Aadress
$IP=@(Get-IPAddresses)

# Tekst, mida kirjutatakse pildile (mitu rida)
$PC_text ="Masin: $PC"
$USER_text = "Kasutaja: $USER"

# Väärtustame text array
$text = ($PC_text,$USER_text) + $IP

#Leiame kõige pikema tekstirea kuvatavas tekstis
$koigePikem = 0
foreach ($number in $text) { 
	if($koigepikem -lt $number.Length)
    {
        $koigepikem = $number.Length
    }
}

Add-Type -AssemblyName System.Drawing
  
# leiame vähimad Desktopi mõõdud
# Virtual PC peal ei näita monitori pikkust ja laiust, võib tekitada probleeme(ei näe teksti), liiga suurte mõõtude($pikkus, $laius) korral
# Kui mõõte ei ole, määrame väiksemad mõõdud, siis peaks andmed näha olema
$desktops = Get-WmiObject -Class Win32_DesktopMonitor
$pikkus = 9000 #Height
$laius = 9000  #Width
foreach($x in $desktops)
{
    if(($pikkus -gt $x.ScreenHeight) -and ($x.ScreenHeight -gt 100))
    {
        $pikkus = $x.ScreenHeight
    }
        else 
        {
            $pikkus = 920  
        }
    if(($laius -gt $x.ScreenWidth) -and ($x.ScreenWidth -gt 100))
    {
        $laius = $x.ScreenWidth
    }
        else 
        {
            $laius = 1280
        }
}



# Valime kirjastiili, millega teks kirjutatakse
$font = new-object System.Drawing.Font Consolas,18
$gUnit = [Drawing.GraphicsUnit]::Pixel
 
# Määrame taustapintsli värvi; kasutame kui olemasolevat pilti pole määratud
$brushBg = [System.Drawing.Brushes]::Black
 
# Määrame kirjutamis pintsli värvi
$brushFg = [System.Drawing.Brushes]::White
 

# Vaatame kas mõni taustapilt on kasutusel
$d = Get-WmiObject -Class Win32_Desktop
$olemas = $null
foreach($w in $d)
{
    if($w.Wallpaper) 
    {
        $olemas = $w.Wallpaper      
    }
}

# Kui faili asukoht on antud siis kasutame seda
if($Path) 
{
    $olemas = $Path
}

#Kasutame olemasolevat või antud desktopi taustapilti
if($olemas -and ($olemas -ne $imgurl))  
    {
    $img = [System.Drawing.Image]::FromFile("$olemas")
    $bmp = new-object System.Drawing.Bitmap([int]($img.width)),([int]($img.height))
    $graphics = [System.Drawing.Graphics]::FromImage($bmp)
    $rect = New-Object Drawing.Rectangle 0,0,$img.Width,$img.Height
    
    # Joonistab olemasoleva pildi, etteantud failist
    $graphics.DrawImage($img,$rect,0,0,$img.Width,$img.Height,$gUnit)
    $img.Dispose() 
    }
    
# Kui taustapilti pole, loome uue bitmapi
else 
    {
    $bmp = new-object System.Drawing.Bitmap([int]$laius,[int]$pikkus)
    
    $graphics = [System.Drawing.Graphics]::FromImage($bmp)
    $graphics.FillRectangle($brushBg,0,0,$bmp.Width,$bmp.Height)
    }

#Arvutame koha, kust tekst algab
$korgus = $bmp.Height - 190 - $text.count * 20  
$kaugus = $bmp.Width - 120 - $koigePikem * 14

# Kirjutame teksti pildile
foreach ($number in $text) { 
	$korgus = $korgus + 20
	$graphics.DrawString($number,$font,$brushFg,$kaugus,$korgus)
  	$count++  
}
 
# Salvestame uue pildi
$bmp.save($imgurl,[System.Drawing.Imaging.ImageFormat]::Jpeg)
$Path = $imgurl
 
$bmp.Dispose()
$graphics.Dispose()

#Kutsume välja funktsiooni Muudataust
Muudataust