# encoding: ascii
# api: powershell
# title: Export-ScreenShot
# description: Export-Screenshot and Get-Screenshot let you get a System.Drawing.Bitmap of the full virtual screen or a cropped area of it, and save it to file …
# version: 0.1
# type: function
# author: Joel Bennett
# license: CC0
# function: Get-Screenshot
# x-poshcode-id: 585
# x-archived: 2014-08-14T23:34:01
# x-published: 2009-09-15T02:18:00
#
#
## Export-Screenshot to take a screenshot and save it to disk
#####################################################################################
## Usage:
##   Export-Screenshot sshot.png
##   Export-Screenshot screen.jpg (New-Object Drawing.Rectangle 0, 0, 640, 480)
#####################################################################################


$null = [Reflection.Assembly]::LoadWithPartialName( "System.Windows.Forms" )

# Get a screenshot as a bitmap      
function Get-Screenshot ([Drawing.Rectangle]$bounds) {
   $screenshot = new-object Drawing.Bitmap $bounds.width, $bounds.height
   $graphics = [Drawing.Graphics]::FromImage($screenshot)
   # $bounds.Location.Offset(50,50)
   $graphics.CopyFromScreen( $bounds.Location, [Drawing.Point]::Empty, $bounds.size)
	$graphics.Dispose()
   return $screenshot
}

# Save a screenshot to file
function Export-Screenshot {
PARAM (
   [string]$FilePath, 
   [Drawing.Rectangle]$bounds = [Windows.Forms.SystemInformation]::VirtualScreen
)
   write-host "FilePath: $($FilePath)" -fore green

   # Fix paths, in case they don't set [Environment]::CurrentDirectory
   if(!(split-path $FilePath).Length) { 
      $FilePath = join-path $pwd (split-path $FilePath -leaf)
      Write-Host "FilePath: $($FilePath)" -fore magenta
   }
   
   write-host "FilePath: $($FilePath)" -fore cyan

   $screenshot = Get-Screenshot $bounds
   $screenshot.Save( $($FilePath) )
   $screenshot.Dispose()
   gci $FilePath
}
