Last active
July 25, 2023 06:50
-
-
Save dylanlangston/540be0e119f4ab39afd8b5758ae630cd to your computer and use it in GitHub Desktop.
Powershell Script to take screenshots
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Requires -Version 3.0 | |
# ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
# Script: Screenshot.ps1 | |
# Version: 5.0 | |
# Author: Dylan Langston | |
# Comments: This script was hacked together in my free time and is provided as is. It's intended to be a method of quickly taking license removal screenshots but could be used in many workflows. | |
# Tested only on Windows 10 64bit but should (at least kinda) work on any windows machine with Powershell 3.0 or higher. | |
# Date: 4/2020 | |
# ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
# Gets/Sets the default parameters. | |
param( | |
[Parameter(Mandatory = $false,Position = 1,HelpMessage = "Enter Folder to Save Screenshots; path.")] | |
[Alias("Path")] | |
[System.IO.DirectoryInfo]$Directory = "$env:USERPROFILE\Pictures\Screenshots",# The path to save screenshots | |
[Parameter(Mandatory = $false,Position = 2,HelpMessage = "Enter filename for Screenshots; string.")] | |
[Alias("File")] | |
[string]$FileName = "Screenshot_$(get-date -Format 'MM-dd-yyyy_HHmmss')",# The file name | |
[Parameter(Mandatory = $false,Position = 3,HelpMessage = "Enter Color for Border; string.")] | |
[string]$BorderColor = "Red",# Color of the selector, valid options are available here https://docs.microsoft.com/en-us/dotnet/api/system.windows.media.colors | |
[Parameter(Mandatory = $false,Position = 4,HelpMessage = "Specify if images should open after script exits; true/false.")] | |
[Alias("Editor","Viewer","Paint")] | |
[ValidatePattern("[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee]|1|0")] | |
[string]$OpenImages = "true",# Open in default editor app on close | |
[Parameter(Mandatory = $false,Position = 5,HelpMessage = "Specify if screenshots folder should open after script exits; true/false.")] | |
[ValidatePattern("[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee]|1|0")] | |
[Alias("folder")] | |
[string]$OpenFolder = "false",# Open folder on close | |
[Parameter(Mandatory = $false,Position = 6,HelpMessage = "Specify if powershell window should hide on launch; true/false.")] | |
[ValidatePattern("[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee]|1|0")] | |
[Alias("Minimize")] | |
[string]$HidePowershell = "true",# Minimize powershell window on launch | |
[Parameter(Mandatory = $false,Position = 7,HelpMessage = "Specify if file save prompt should appear on start; true/false.")] | |
[ValidatePattern("[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee]|1|0")] | |
[Alias("prompt")] | |
[string]$SaveDialog = "false",# Prompt where to save on launch | |
[Parameter(Mandatory = $false,Position = 8,HelpMessage = "Specify the scancode to monitor for; int.")] | |
[ValidatePattern("\d+")] | |
[Alias("keycode","code")] | |
[string]$scanCode = 44,# Default Hotkey is printscreen | |
[Parameter(Mandatory = $false,Position = 9,HelpMessage = "Specify if this should run in the system tray; true/false.")] | |
[ValidatePattern("[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee]|1|0")] | |
[Alias("background","systemtray")] | |
[string]$runInSystray = "true" # Run Program in system tray | |
) | |
# Ensure only once instance of the script is running at a time | |
# https://stackoverflow.com/a/33574883 | |
#Get array of all powershell scripts currently running | |
try { | |
if ($(Split-Path -Leaf -Path ([Environment]::GetCommandLineArgs()[0])) -match "powershell") { | |
$scriptname = $MyInvocation.MyCommand.Name | |
} else { | |
$scriptname = $(Split-Path -Leaf -Path ([Environment]::GetCommandLineArgs()[0])) | |
} | |
} catch { | |
$scriptname = $(Split-Path -Leaf -Path ([Environment]::GetCommandLineArgs()[0])) | |
} | |
$PsScriptsRunning = Get-CimInstance win32_process | Where-Object { $_.processname -eq $(Split-Path -Leaf -Path ([Environment]::GetCommandLineArgs()[0])) } | Select-Object commandline,ProcessId | |
#enumerate each element of array and compare | |
foreach ($PsCmdLine in $PsScriptsRunning) { | |
[int32]$OtherPID = $PsCmdLine.ProcessId | |
[string]$OtherCmdLine = $PsCmdLine.commandline | |
#Are other instances of this script already running? | |
if (($OtherCmdLine -match "$scriptname") -and ($OtherPID -ne $PID)) { | |
Write-Output "PID [$OtherPID] is already running this script [$scriptname]. Triggering that instance instead." | |
Write-Output "Exiting this instance. (PID=$PID)..." | |
$takescreenshot = [System.IO.Path]::GetTempPath() + "screenshot.queue" | |
Out-File -Force -FilePath $takescreenshot | Out-Null | |
Start-Sleep -Seconds 3 | |
exit | |
} | |
} | |
# Remove old quit item. | |
$quitnow = Resolve-Path $([System.IO.Path]::GetTempPath() + "screenshot.quit") 2> $null | |
if ($quitnow) { | |
Remove-Item -Force $([System.IO.Path]::GetTempPath() + "screenshot.quit") | Out-Null | |
} | |
# Convert RunInSysTray to bool | |
if ($runInSystray -eq "true" -or $runInSystray -eq "1") { $tmpruninsys = $true } else { $tmpruninsys = $false } | |
# Prompt where to save file | |
#Thanks, https://gallery.technet.microsoft.com/scriptcenter/GUI-popup-FileSaveDialog-813a4966 | |
if ($SaveDialog -eq "true" -or $SaveDialog -eq "1") { | |
if ($runInSystray -eq $false) { | |
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | |
$AsktoSave = $false | |
$SaveFileDialog = (New-Object windows.forms.savefiledialog) | |
$SaveFileDialog.initialDirectory = $env:USERPROFILE | |
$SaveFileDialog.title = "Save Screenshot" | |
$SaveFileDialog.filter = "PNG|*.png|All Files|*.*" | |
$SaveFileDialog.ShowHelp = $False | |
$SaveFileDialog.OverwritePrompt = $False | |
Write-Output "Where would you like to save the screenshot?... (see File Save Dialog)" | |
$result = $SaveFileDialog.ShowDialog() | |
if ($result -eq "OK") { | |
$Directory = Split-Path $SaveFileDialog.filename | |
$FileName = [System.IO.Path]::GetFileNameWithoutExtension($SaveFileDialog.filename) | |
} else { | |
Write-Output "Using Defaults instead." | |
} | |
} else { $AsktoSave = $true } | |
} else { | |
if ($tmpruninsys -eq $true -and (-not ($FileName -match "Screenshot_\d{2}-\d{2}-\d{4}_\d{6}"))) { | |
Write-Output "Can't run in System Tray and have custom filename specified at launch. Run with '-prompt 1' if you'd like to enter a custom name every time you save." | |
} else { | |
# Make sure the screenshots folder exists, create it otherwise | |
New-Item -ItemType Directory -Force -Path $Directory | Out-Null | |
} | |
} | |
# Minimize powershell window if not already hidden on launch and the hide powershell param is not set to false. | |
if ($HidePowershell -eq "true" -or $HidePowershell -eq "1") { | |
if ($null -eq $(Get-CimInstance win32_process | Where-Object { $_.processname -eq 'powershell.exe' -and $_.ProcessId -eq $pid -and $_.commandline -match $("-WindowStyle Hidden") })) { | |
Add-Type -Name Window -Namespace Console -MemberDefinition ' | |
[DllImport("Kernel32.dll")] | |
public static extern IntPtr GetConsoleWindow(); | |
[DllImport("user32.dll")] | |
public static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow); | |
' | |
$consolePtr = [Console.Window]::GetConsoleWindow() | |
[Console.Window]::ShowWindow($consolePtr,0) | Out-Null | |
} | |
} | |
# Thanks to the following resources which proved super helpful | |
# https://devblogs.microsoft.com/scripting/beginning-use-of-powershell-runspaces-part-2/ | |
# https://learn-powershell.net/2015/11/30/create-a-mouse-cursor-tracker-using-powershell-and-wpf/ | |
$ParamList = @{ | |
Folder = $Directory | |
BorderColor = $BorderColor | |
Name = $FileName | |
runInSystray = $tmpruninsys | |
scanCode = $scanCode | |
AsktoSave = $AsktoSave | |
OpenImages = $OpenImages | |
OpenFolder = $OpenFolder | |
scriptname = $scriptname | |
} | |
$Runspacehash = [hashtable]::Synchronized(@{}) | |
$Runspacehash.host = $Host | |
$Runspacehash.runspace = [runspacefactory]::CreateRunspace() | |
$Runspacehash.runspace.ApartmentState = “STA” | |
$Runspacehash.runspace.ThreadOptions = "UseNewThread” | |
$Runspacehash.runspace.Open() | |
$Runspacehash.psCmd = { Add-Type -AssemblyName PresentationFramework,System.Windows.Forms }.GetPowerShell() | |
$Runspacehash.runspace.SessionStateProxy.SetVariable("Runspacehash",$Runspacehash) | |
$Runspacehash.psCmd.runspace = $Runspacehash.runspace | |
$Runspacehash.Handle = $Runspacehash.psCmd.AddScript({ | |
param($Folder,$BorderColor,$Name,$runInSystray,$scanCode,$AsktoSave,$OpenImages,$OpenFolder,$scriptname) | |
$ErrorActionPreference = 'SilentlyContinue' | |
# This tip from http://stackoverflow.com/questions/3358372/windows-forms-look-different-in-powershell-and-powershell-ise-why/3359274#3359274 | |
[System.Windows.Forms.Application]::EnableVisualStyles(); | |
# If running Windows 10 setup workspace switching, Thanks to https://gallery.technet.microsoft.com/scriptcenter/Powershell-commands-to-d0e79cc5 | |
if ($PSVersionTable.PSVersion.Major -lt 6) { | |
$OSVer = $PSVersionTable.BuildVersion.Major | |
$OSBuild = $PSVersionTable.BuildVersion.Build | |
} | |
else { | |
$OSVer = [Environment]::OSVersion.Version.Major | |
$OSBuild = [Environment]::OSVersion.Version.Build | |
} | |
if ($OSVer -ge 10) | |
{ | |
if ($OSBuild -ge 14392) | |
{ | |
$Windows1607 = $TRUE | |
$Windows1803 = $FALSE | |
$Windows1809 = $FALSE | |
if ($OSBuild -ge 17134) | |
{ | |
$Windows1607 = $FALSE | |
$Windows1803 = $TRUE | |
$Windows1809 = $FALSE | |
} | |
if ($OSBuild -ge 17661) | |
{ | |
$Windows1607 = $FALSE | |
$Windows1803 = $FALSE | |
$Windows1809 = $TRUE | |
} | |
Add-Type -Language CSharp -TypeDefinition @" | |
using System; | |
using System.Text; | |
using System.Collections.Generic; | |
using System.Runtime.InteropServices; | |
using System.ComponentModel; | |
// Based on http://stackoverflow.com/a/32417530, Windows 10 SDK and github projects Grabacr07/VirtualDesktop and mzomparelli/zVirtualDesktop | |
namespace VirtualDesktop | |
{ | |
internal static class Guids | |
{ | |
public static readonly Guid CLSID_ImmersiveShell = new Guid("C2F03A33-21F5-47FA-B4BB-156362A2F239"); | |
public static readonly Guid CLSID_VirtualDesktopManagerInternal = new Guid("C5E0CDCA-7B6E-41B2-9FC4-D93975CC467B"); | |
public static readonly Guid CLSID_VirtualDesktopManager = new Guid("AA509086-5CA9-4C25-8F95-589D3C07B48A"); | |
public static readonly Guid CLSID_VirtualDesktopPinnedApps = new Guid("B5A399E7-1C87-46B8-88E9-FC5747B171BD"); | |
} | |
[StructLayout(LayoutKind.Sequential)] | |
internal struct Size | |
{ | |
public int X; | |
public int Y; | |
} | |
[StructLayout(LayoutKind.Sequential)] | |
internal struct Rect | |
{ | |
public int Left; | |
public int Top; | |
public int Right; | |
public int Bottom; | |
} | |
internal enum APPLICATION_VIEW_CLOAK_TYPE : int | |
{ | |
AVCT_NONE = 0, | |
AVCT_DEFAULT = 1, | |
AVCT_VIRTUAL_DESKTOP = 2 | |
} | |
internal enum APPLICATION_VIEW_COMPATIBILITY_POLICY : int | |
{ | |
AVCP_NONE = 0, | |
AVCP_SMALL_SCREEN = 1, | |
AVCP_TABLET_SMALL_SCREEN = 2, | |
AVCP_VERY_SMALL_SCREEN = 3, | |
AVCP_HIGH_SCALE_FACTOR = 4 | |
} | |
[ComImport] | |
// https://github.com/mzomparelli/zVirtualDesktop/wiki: Updated interfaces in Windows 10 build 17134, 17661, and 17666 | |
$(if ($Windows1607) {@" | |
// Windows 10 1607 and Server 2016: | |
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] | |
[Guid("9AC0B5C8-1484-4C5B-9533-4134A0F97CEA")] | |
"@ }) | |
$(if ($Windows1803) {@" | |
// Windows 10 1803: | |
[InterfaceType(ComInterfaceType.InterfaceIsIInspectable)] | |
[Guid("871F602A-2B58-42B4-8C4B-6C43D642C06F")] | |
"@ }) | |
$(if ($Windows1809) {@" | |
// Windows 10 1809: | |
[InterfaceType(ComInterfaceType.InterfaceIsIInspectable)] | |
[Guid("372E1D3B-38D3-42E4-A15B-8AB2B178F513")] | |
"@ }) | |
internal interface IApplicationView | |
{ | |
int SetFocus(); | |
int SwitchTo(); | |
int TryInvokeBack(IntPtr /* IAsyncCallback* */ callback); | |
int GetThumbnailWindow(out IntPtr hwnd); | |
int GetMonitor(out IntPtr /* IImmersiveMonitor */ immersiveMonitor); | |
int GetVisibility(out int visibility); | |
int SetCloak(APPLICATION_VIEW_CLOAK_TYPE cloakType, int unknown); | |
int GetPosition(ref Guid guid /* GUID for IApplicationViewPosition */, out IntPtr /* IApplicationViewPosition** */ position); | |
int SetPosition(ref IntPtr /* IApplicationViewPosition* */ position); | |
int InsertAfterWindow(IntPtr hwnd); | |
int GetExtendedFramePosition(out Rect rect); | |
int GetAppUserModelId([MarshalAs(UnmanagedType.LPWStr)] out string id); | |
int SetAppUserModelId(string id); | |
int IsEqualByAppUserModelId(string id, out int result); | |
int GetViewState(out uint state); | |
int SetViewState(uint state); | |
int GetNeediness(out int neediness); | |
int GetLastActivationTimestamp(out ulong timestamp); | |
int SetLastActivationTimestamp(ulong timestamp); | |
int GetVirtualDesktopId(out Guid guid); | |
int SetVirtualDesktopId(ref Guid guid); | |
int GetShowInSwitchers(out int flag); | |
int SetShowInSwitchers(int flag); | |
int GetScaleFactor(out int factor); | |
int CanReceiveInput(out bool canReceiveInput); | |
int GetCompatibilityPolicyType(out APPLICATION_VIEW_COMPATIBILITY_POLICY flags); | |
int SetCompatibilityPolicyType(APPLICATION_VIEW_COMPATIBILITY_POLICY flags); | |
$(if ($Windows1607) {@" | |
int GetPositionPriority(out IntPtr /* IShellPositionerPriority** */ priority); | |
int SetPositionPriority(IntPtr /* IShellPositionerPriority* */ priority); | |
"@ }) | |
int GetSizeConstraints(IntPtr /* IImmersiveMonitor* */ monitor, out Size size1, out Size size2); | |
int GetSizeConstraintsForDpi(uint uint1, out Size size1, out Size size2); | |
int SetSizeConstraintsForDpi(ref uint uint1, ref Size size1, ref Size size2); | |
$(if ($Windows1607) {@" | |
int QuerySizeConstraintsFromApp(); | |
"@ }) | |
int OnMinSizePreferencesUpdated(IntPtr hwnd); | |
int ApplyOperation(IntPtr /* IApplicationViewOperation* */ operation); | |
int IsTray(out bool isTray); | |
int IsInHighZOrderBand(out bool isInHighZOrderBand); | |
int IsSplashScreenPresented(out bool isSplashScreenPresented); | |
int Flash(); | |
int GetRootSwitchableOwner(out IApplicationView rootSwitchableOwner); | |
int EnumerateOwnershipTree(out IObjectArray ownershipTree); | |
int GetEnterpriseId([MarshalAs(UnmanagedType.LPWStr)] out string enterpriseId); | |
int IsMirrored(out bool isMirrored); | |
$(if ($Windows1803) {@" | |
int Unknown1(out int unknown); | |
int Unknown2(out int unknown); | |
int Unknown3(out int unknown); | |
int Unknown4(out int unknown); | |
"@ }) | |
$(if ($Windows1809) {@" | |
int Unknown1(out int unknown); | |
int Unknown2(out int unknown); | |
int Unknown3(out int unknown); | |
int Unknown4(out int unknown); | |
int Unknown5(out int unknown); | |
int Unknown6(int unknown); | |
int Unknown7(); | |
int Unknown8(out int unknown); | |
int Unknown9(int unknown); | |
int Unknown10(int unknownX, int unknownY); | |
int Unknown11(int unknown); | |
int Unknown12(out Size size1); | |
"@ }) | |
} | |
[ComImport] | |
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] | |
$(if ($Windows1607) {@" | |
// Windows 10 1607 and Server 2016: | |
[Guid("2C08ADF0-A386-4B35-9250-0FE183476FCC")] | |
"@ }) | |
$(if ($Windows1803) {@" | |
// Windows 10 1803: | |
[Guid("2C08ADF0-A386-4B35-9250-0FE183476FCC")] | |
"@ }) | |
$(if ($Windows1809) {@" | |
// Windows 10 1809: | |
[Guid("1841C6D7-4F9D-42C0-AF41-8747538F10E5")] | |
"@ }) | |
internal interface IApplicationViewCollection | |
{ | |
int GetViews(out IObjectArray array); | |
int GetViewsByZOrder(out IObjectArray array); | |
int GetViewsByAppUserModelId(string id, out IObjectArray array); | |
int GetViewForHwnd(IntPtr hwnd, out IApplicationView view); | |
int GetViewForApplication(object application, out IApplicationView view); | |
int GetViewForAppUserModelId(string id, out IApplicationView view); | |
int GetViewInFocus(out IntPtr view); | |
$(if ($Windows1803 -or $Windows1809) {@" | |
// Windows 10 1803 and 1809: | |
int Unknown1(out IntPtr view); | |
"@ }) | |
void RefreshCollection(); | |
int RegisterForApplicationViewChanges(object listener, out int cookie); | |
$(if ($Windows1607) {@" | |
// Windows 10 1607 and Server 2016: | |
int RegisterForApplicationViewPositionChanges(object listener, out int cookie); | |
"@ }) | |
$(if ($Windows1803) {@" | |
// Windows 10 1803: | |
int RegisterForApplicationViewPositionChanges(object listener, out int cookie); | |
"@ }) | |
int UnregisterForApplicationViewChanges(int cookie); | |
} | |
[ComImport] | |
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] | |
[Guid("FF72FFDD-BE7E-43FC-9C03-AD81681E88E4")] | |
internal interface IVirtualDesktop | |
{ | |
bool IsViewVisible(IApplicationView view); | |
Guid GetId(); | |
} | |
[ComImport] | |
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] | |
[Guid("F31574D6-B682-4CDC-BD56-1827860ABEC6")] | |
internal interface IVirtualDesktopManagerInternal | |
{ | |
int GetCount(); | |
void MoveViewToDesktop(IApplicationView view, IVirtualDesktop desktop); | |
bool CanViewMoveDesktops(IApplicationView view); | |
IVirtualDesktop GetCurrentDesktop(); | |
void GetDesktops(out IObjectArray desktops); | |
[PreserveSig] | |
int GetAdjacentDesktop(IVirtualDesktop from, int direction, out IVirtualDesktop desktop); | |
void SwitchDesktop(IVirtualDesktop desktop); | |
IVirtualDesktop CreateDesktop(); | |
void RemoveDesktop(IVirtualDesktop desktop, IVirtualDesktop fallback); | |
IVirtualDesktop FindDesktop(ref Guid desktopid); | |
} | |
[ComImport] | |
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] | |
[Guid("A5CD92FF-29BE-454C-8D04-D82879FB3F1B")] | |
internal interface IVirtualDesktopManager | |
{ | |
bool IsWindowOnCurrentVirtualDesktop(IntPtr topLevelWindow); | |
Guid GetWindowDesktopId(IntPtr topLevelWindow); | |
void MoveWindowToDesktop(IntPtr topLevelWindow, ref Guid desktopId); | |
} | |
[ComImport] | |
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] | |
[Guid("4CE81583-1E4C-4632-A621-07A53543148F")] | |
internal interface IVirtualDesktopPinnedApps | |
{ | |
bool IsAppIdPinned(string appId); | |
void PinAppID(string appId); | |
void UnpinAppID(string appId); | |
bool IsViewPinned(IApplicationView applicationView); | |
void PinView(IApplicationView applicationView); | |
void UnpinView(IApplicationView applicationView); | |
} | |
[ComImport] | |
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] | |
[Guid("92CA9DCD-5622-4BBA-A805-5E9F541BD8C9")] | |
internal interface IObjectArray | |
{ | |
void GetCount(out int count); | |
void GetAt(int index, ref Guid iid, [MarshalAs(UnmanagedType.Interface)]out object obj); | |
} | |
[ComImport] | |
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] | |
[Guid("6D5140C1-7436-11CE-8034-00AA006009FA")] | |
internal interface IServiceProvider10 | |
{ | |
[return: MarshalAs(UnmanagedType.IUnknown)] | |
object QueryService(ref Guid service, ref Guid riid); | |
} | |
internal static class DesktopManager | |
{ | |
static DesktopManager() | |
{ | |
var shell = (IServiceProvider10)Activator.CreateInstance(Type.GetTypeFromCLSID(Guids.CLSID_ImmersiveShell)); | |
VirtualDesktopManagerInternal = (IVirtualDesktopManagerInternal)shell.QueryService(Guids.CLSID_VirtualDesktopManagerInternal, typeof(IVirtualDesktopManagerInternal).GUID); | |
VirtualDesktopManager = (IVirtualDesktopManager)Activator.CreateInstance(Type.GetTypeFromCLSID(Guids.CLSID_VirtualDesktopManager)); | |
ApplicationViewCollection = (IApplicationViewCollection)shell.QueryService(typeof(IApplicationViewCollection).GUID, typeof(IApplicationViewCollection).GUID); | |
VirtualDesktopPinnedApps = (IVirtualDesktopPinnedApps)shell.QueryService(Guids.CLSID_VirtualDesktopPinnedApps, typeof(IVirtualDesktopPinnedApps).GUID); | |
} | |
internal static IVirtualDesktopManagerInternal VirtualDesktopManagerInternal; | |
internal static IVirtualDesktopManager VirtualDesktopManager; | |
internal static IApplicationViewCollection ApplicationViewCollection; | |
internal static IVirtualDesktopPinnedApps VirtualDesktopPinnedApps; | |
internal static IVirtualDesktop GetDesktop(int index) | |
{ // get desktop with index | |
int count = VirtualDesktopManagerInternal.GetCount(); | |
if (index < 0 || index >= count) throw new ArgumentOutOfRangeException("index"); | |
IObjectArray desktops; | |
VirtualDesktopManagerInternal.GetDesktops(out desktops); | |
object objdesktop; | |
desktops.GetAt(index, typeof(IVirtualDesktop).GUID, out objdesktop); | |
Marshal.ReleaseComObject(desktops); | |
return (IVirtualDesktop)objdesktop; | |
} | |
internal static int GetDesktopIndex(IVirtualDesktop desktop) | |
{ // get index of desktop | |
int index = -1; | |
Guid IdSearch = desktop.GetId(); | |
IObjectArray desktops; | |
VirtualDesktopManagerInternal.GetDesktops(out desktops); | |
object objdesktop; | |
for (int i = 0; i < VirtualDesktopManagerInternal.GetCount(); i++) | |
{ | |
desktops.GetAt(i, typeof(IVirtualDesktop).GUID, out objdesktop); | |
if (IdSearch.CompareTo(((IVirtualDesktop)objdesktop).GetId()) == 0) | |
{ index = i; | |
break; | |
} | |
} | |
Marshal.ReleaseComObject(desktops); | |
return index; | |
} | |
internal static IApplicationView GetApplicationView(this IntPtr hWnd) | |
{ // get application view to window handle | |
IApplicationView view; | |
ApplicationViewCollection.GetViewForHwnd(hWnd, out view); | |
return view; | |
} | |
internal static string GetAppId(IntPtr hWnd) | |
{ // get Application ID to window handle | |
string appId; | |
hWnd.GetApplicationView().GetAppUserModelId(out appId); | |
return appId; | |
} | |
} | |
public class WindowInformation | |
{ // stores window informations | |
public string Title { get; set; } | |
public int Handle { get; set; } | |
} | |
public class Desktop | |
{ | |
private IVirtualDesktop ivd; | |
private Desktop(IVirtualDesktop desktop) { this.ivd = desktop; } | |
public override int GetHashCode() | |
{ // Get hash | |
return ivd.GetHashCode(); | |
} | |
public override bool Equals(object obj) | |
{ // Compares with object | |
var desk = obj as Desktop; | |
return desk != null && object.ReferenceEquals(this.ivd, desk.ivd); | |
} | |
public static int Count | |
{ // Returns the number of desktops | |
get { return DesktopManager.VirtualDesktopManagerInternal.GetCount(); } | |
} | |
public static Desktop Current | |
{ // Returns current desktop | |
get { return new Desktop(DesktopManager.VirtualDesktopManagerInternal.GetCurrentDesktop()); } | |
} | |
public static Desktop FromIndex(int index) | |
{ // Create desktop object from index 0..Count-1 | |
return new Desktop(DesktopManager.GetDesktop(index)); | |
} | |
public static Desktop FromWindow(IntPtr hWnd) | |
{ // Creates desktop object on which window <hWnd> is displayed | |
if (hWnd == IntPtr.Zero) throw new ArgumentNullException(); | |
Guid id = DesktopManager.VirtualDesktopManager.GetWindowDesktopId(hWnd); | |
return new Desktop(DesktopManager.VirtualDesktopManagerInternal.FindDesktop(ref id)); | |
} | |
public static int FromDesktop(Desktop desktop) | |
{ // Returns index of desktop object or -1 if not found | |
return DesktopManager.GetDesktopIndex(desktop.ivd); | |
} | |
public static Desktop Create() | |
{ // Create a new desktop | |
return new Desktop(DesktopManager.VirtualDesktopManagerInternal.CreateDesktop()); | |
} | |
public void Remove(Desktop fallback = null) | |
{ // Destroy desktop and switch to <fallback> | |
IVirtualDesktop fallbackdesktop; | |
if (fallback == null) | |
{ // if no fallback is given use desktop to the left except for desktop 0. | |
Desktop dtToCheck = new Desktop(DesktopManager.GetDesktop(0)); | |
if (this.Equals(dtToCheck)) | |
{ // desktop 0: set fallback to second desktop (= "right" desktop) | |
DesktopManager.VirtualDesktopManagerInternal.GetAdjacentDesktop(ivd, 4, out fallbackdesktop); // 4 = RightDirection | |
} | |
else | |
{ // set fallback to "left" desktop | |
DesktopManager.VirtualDesktopManagerInternal.GetAdjacentDesktop(ivd, 3, out fallbackdesktop); // 3 = LeftDirection | |
} | |
} | |
else | |
// set fallback desktop | |
fallbackdesktop = fallback.ivd; | |
DesktopManager.VirtualDesktopManagerInternal.RemoveDesktop(ivd, fallbackdesktop); | |
} | |
public bool IsVisible | |
{ // Returns <true> if this desktop is the current displayed one | |
get { return object.ReferenceEquals(ivd, DesktopManager.VirtualDesktopManagerInternal.GetCurrentDesktop()); } | |
} | |
public void MakeVisible() | |
{ // Make this desktop visible | |
DesktopManager.VirtualDesktopManagerInternal.SwitchDesktop(ivd); | |
} | |
public Desktop Left | |
{ // Returns desktop at the left of this one, null if none | |
get | |
{ | |
IVirtualDesktop desktop; | |
int hr = DesktopManager.VirtualDesktopManagerInternal.GetAdjacentDesktop(ivd, 3, out desktop); // 3 = LeftDirection | |
if (hr == 0) | |
return new Desktop(desktop); | |
else | |
return null; | |
} | |
} | |
public Desktop Right | |
{ // Returns desktop at the right of this one, null if none | |
get | |
{ | |
IVirtualDesktop desktop; | |
int hr = DesktopManager.VirtualDesktopManagerInternal.GetAdjacentDesktop(ivd, 4, out desktop); // 4 = RightDirection | |
if (hr == 0) | |
return new Desktop(desktop); | |
else | |
return null; | |
} | |
} | |
public void MoveWindow(IntPtr hWnd) | |
{ // Move window <hWnd> to this desktop | |
if (hWnd == IntPtr.Zero) throw new ArgumentNullException(); | |
if (hWnd == GetConsoleWindow()) | |
{ // own window | |
try // the easy way (powershell's own console) | |
{ | |
DesktopManager.VirtualDesktopManager.MoveWindowToDesktop(hWnd, ivd.GetId()); | |
} | |
catch // powershell in cmd console | |
{ | |
IApplicationView view; | |
DesktopManager.ApplicationViewCollection.GetViewForHwnd(hWnd, out view); | |
DesktopManager.VirtualDesktopManagerInternal.MoveViewToDesktop(view, ivd); | |
} | |
} | |
else | |
{ // window of other process | |
IApplicationView view; | |
DesktopManager.ApplicationViewCollection.GetViewForHwnd(hWnd, out view); | |
DesktopManager.VirtualDesktopManagerInternal.MoveViewToDesktop(view, ivd); | |
} | |
} | |
public bool HasWindow(IntPtr hWnd) | |
{ // Returns true if window <hWnd> is on this desktop | |
if (hWnd == IntPtr.Zero) throw new ArgumentNullException(); | |
return ivd.GetId() == DesktopManager.VirtualDesktopManager.GetWindowDesktopId(hWnd); | |
} | |
public static bool IsWindowPinned(IntPtr hWnd) | |
{ // Returns true if window <hWnd> is pinned to all desktops | |
if (hWnd == IntPtr.Zero) throw new ArgumentNullException(); | |
return DesktopManager.VirtualDesktopPinnedApps.IsViewPinned(hWnd.GetApplicationView()); | |
} | |
public static void PinWindow(IntPtr hWnd) | |
{ // pin window <hWnd> to all desktops | |
if (hWnd == IntPtr.Zero) throw new ArgumentNullException(); | |
var view = hWnd.GetApplicationView(); | |
if (!DesktopManager.VirtualDesktopPinnedApps.IsViewPinned(view)) | |
{ // pin only if not already pinned | |
DesktopManager.VirtualDesktopPinnedApps.PinView(view); | |
} | |
} | |
public static void UnpinWindow(IntPtr hWnd) | |
{ // unpin window <hWnd> from all desktops | |
if (hWnd == IntPtr.Zero) throw new ArgumentNullException(); | |
var view = hWnd.GetApplicationView(); | |
if (DesktopManager.VirtualDesktopPinnedApps.IsViewPinned(view)) | |
{ // unpin only if not already unpinned | |
DesktopManager.VirtualDesktopPinnedApps.UnpinView(view); | |
} | |
} | |
public static bool IsApplicationPinned(IntPtr hWnd) | |
{ // Returns true if application for window <hWnd> is pinned to all desktops | |
if (hWnd == IntPtr.Zero) throw new ArgumentNullException(); | |
return DesktopManager.VirtualDesktopPinnedApps.IsAppIdPinned(DesktopManager.GetAppId(hWnd)); | |
} | |
public static void PinApplication(IntPtr hWnd) | |
{ // pin application for window <hWnd> to all desktops | |
if (hWnd == IntPtr.Zero) throw new ArgumentNullException(); | |
string appId = DesktopManager.GetAppId(hWnd); | |
if (!DesktopManager.VirtualDesktopPinnedApps.IsAppIdPinned(appId)) | |
{ // pin only if not already pinned | |
DesktopManager.VirtualDesktopPinnedApps.PinAppID(appId); | |
} | |
} | |
public static void UnpinApplication(IntPtr hWnd) | |
{ // unpin application for window <hWnd> from all desktops | |
if (hWnd == IntPtr.Zero) throw new ArgumentNullException(); | |
var view = hWnd.GetApplicationView(); | |
string appId = DesktopManager.GetAppId(hWnd); | |
if (DesktopManager.VirtualDesktopPinnedApps.IsAppIdPinned(appId)) | |
{ // unpin only if already pinned | |
DesktopManager.VirtualDesktopPinnedApps.UnpinAppID(appId); | |
} | |
} | |
// get window handle of current console window (even if powershell started in cmd) | |
[DllImport("Kernel32.dll")] | |
public static extern IntPtr GetConsoleWindow(); | |
// get handle of active window | |
[DllImport("user32.dll")] | |
public static extern IntPtr GetForegroundWindow(); | |
// prepare callback function for window enumeration | |
private delegate bool CallBackPtr(int hwnd, int lParam); | |
private static CallBackPtr callBackPtr = Callback; | |
// list of window informations | |
private static List<WindowInformation> WindowInformationList = new List<WindowInformation>(); | |
// enumerate windows | |
[DllImport("User32.dll", SetLastError = true)] | |
[return: MarshalAs(UnmanagedType.Bool)] | |
private static extern bool EnumWindows(CallBackPtr lpEnumFunc, IntPtr lParam); | |
// get window title length | |
[DllImport("User32.dll", CharSet = CharSet.Auto, SetLastError = true)] | |
private static extern int GetWindowTextLength(IntPtr hWnd); | |
// get window title | |
[DllImport("User32.dll", CharSet = CharSet.Auto, SetLastError = true)] | |
private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); | |
// callback function for window enumeration | |
private static bool Callback(int hWnd, int lparam) | |
{ | |
int length = GetWindowTextLength((IntPtr)hWnd); | |
if (length > 0) | |
{ | |
StringBuilder sb = new StringBuilder(length + 1); | |
if (GetWindowText((IntPtr)hWnd, sb, sb.Capacity) > 0) | |
{ WindowInformationList.Add(new WindowInformation {Handle = hWnd, Title = sb.ToString()}); } | |
} | |
return true; | |
} | |
// get list of all windows with title | |
public static List<WindowInformation> GetWindows() | |
{ | |
WindowInformationList = new List<WindowInformation>(); | |
EnumWindows(callBackPtr, IntPtr.Zero); | |
return WindowInformationList; | |
} | |
// find first window with string in title | |
public static WindowInformation FindWindow(string WindowTitle) | |
{ | |
WindowInformationList = new List<WindowInformation>(); | |
EnumWindows(callBackPtr, IntPtr.Zero); | |
WindowInformation result = WindowInformationList.Find(x => x.Title.IndexOf(WindowTitle, StringComparison.OrdinalIgnoreCase) >= 0); | |
return result; | |
} | |
} | |
} | |
"@ | |
} | |
} | |
# Used for debugging | |
Function Write-Log { | |
Param( | |
[Parameter(Mandatory=$True)] | |
[string] | |
$Message, | |
[Parameter(Mandatory=$False)] | |
[ValidateSet("INFO","WARN","ERROR","FATAL","DEBUG")] | |
[String] | |
$Level = "INFO", | |
[Parameter(Mandatory=$False)] | |
[string] | |
$Logfile = "$(gc env:userprofile)\Desktop\screenshots_log_$(Get-Date -Format "MM-dd-yyyy").log" | |
) | |
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss.fff") | |
$Line = "Time: $Stamp - Level: $Level - Message: $Message" | |
Add-Content $Logfile -Value $Line | |
} | |
#The about page | |
function about { | |
$global:state = 99 | |
[System.Windows.Forms.MessageBox]::Show("Screenshot Powershell Utility version 4.1`r`n`r`nCreated by Dylan Langston") | Out-null | |
} | |
#Takes Screenshot | |
function takescreenshot { | |
if ($AsktoSave -eq $true) { | |
$SaveFileDialog = (New-Object windows.forms.savefiledialog) | |
$SaveFileDialog.initialDirectory = $env:USERPROFILE | |
$SaveFileDialog.title = "Save Screenshot" | |
$SaveFileDialog.filter = "PNG|*.png|All Files|*.*" | |
$SaveFileDialog.ShowHelp = $False | |
$SaveFileDialog.OverwritePrompt = $False | |
$result = $SaveFileDialog.ShowDialog() | |
if ($result -eq "OK") { | |
$global:Folder = Split-Path $SaveFileDialog.filename | |
$global:Name = [System.IO.Path]::GetFileNameWithoutExtension($SaveFileDialog.filename) | |
$global:File = "$Folder\" + "$Name" | |
} else { | |
$global:Name = "Screenshot_$(get-date -Format 'MM-dd-yyyy_HHmmss')" | |
$global:File = "$Folder\" + "$Name" | |
} | |
} | |
if ($ResetFilename -eq $true -and $AsktoSave -ne $true) { | |
$global:Name = "Screenshot_$(get-date -Format 'MM-dd-yyyy_HHmmss')" | |
$global:File = "$Folder\" + "$Name" | |
} | |
remove-job -Name "activewindows" -Force | Out-Null | |
(getActive($([io.path]::GetFileNameWithoutExtension($scriptname)))) | Out-Null | |
$Window.width = $Screen.width | |
$Border.width = $Screen.width | |
$Window.height = $Screen.height | |
$Border.height = $Screen.height | |
$Window.Cursor = "Cross" | |
if ($OSVer -ge 10){ if ($OSBuild -ge 14392){ | |
if (-not ([VirtualDesktop.Desktop]::Current).HasWindow($scripthandle)) { | |
([VirtualDesktop.Desktop]::Current).MoveWindow($scripthandle) | |
} | |
}} | |
$Window.Activate() | |
$global:recentlist = @() | |
$global:screenshotcounter = 1 | |
$global:konami = @() | |
$global:state = 0 | |
# Sends Middle Mouse button which ensures the window is in focus. | |
$signature=@' | |
[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)] | |
public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo); | |
'@ | |
$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru | |
$SendMouseClick::mouse_event(0x00000020, 0, 0, 0, 0); | |
$SendMouseClick::mouse_event(0x00000040, 0, 0, 0, 0); | |
} | |
# Get List of Active Windows | |
function getActive() { | |
param( | |
[string] | |
$scriptname = "foo" | |
) | |
Start-Job -Name "activewindows" -ScriptBlock { | |
param( | |
[string] | |
$scriptname = "foo", | |
[int] | |
$PID1 = 0 | |
) | |
function getActive() { | |
param( | |
[string] | |
$scriptname1 = "foo", | |
[int] | |
$PID2 = 0 | |
) | |
$blacklist = @("explorer", "g2mstart", "g2mlauncher", $scriptname1) #List of processes to ignore | |
$whitelist = @("SupportFlow") #List of processes to add to the list of active windows, even if not responding. | |
try { | |
Add-Type @" | |
using System; | |
using System.Runtime.InteropServices; | |
public class GetRecent { | |
[DllImport("user32.dll")] | |
public static extern IntPtr GetWindow(IntPtr handle, int uCmd); | |
[DllImport("user32.dll")] | |
public static extern IntPtr GetForegroundWindow(); | |
} | |
"@ | |
$processes = Get-Process | |
$CurrentHNDL = $(($processes) | Where-Object { $_.Id -eq $PID2 }).MainWindowHandle | |
$FirstWindow = $([GetRecent]::GetWindow($([GetRecent]::GetForegroundWindow()),[int]1)) | |
$CurrentWindow = $FirstWindow | |
$handles = @() | |
$LOOP = $true | |
while ($LOOP) { | |
if ($CurrentWindow -ne $CurrentHNDL) { | |
$handles += $CurrentWindow | |
$CurrentWindow = $([GetRecent]::GetWindow($CurrentWindow,[int]3)) | |
} | |
else { $LOOP = $false } | |
} | |
$processesMWH = $processes.MainWindowHandle | |
$zorder = @() | |
[array]::Reverse($handles) | |
foreach ($handle in $handles) { | |
if ($processesMWH -contains $handle) { | |
$zorder += $(($processesMWH | Where-Object { $_ -eq $handle })) | |
} | |
if ($zorder.length -eq 15) { | |
break | |
} | |
} | |
$recentlist = @() | |
foreach ($z in $zorder) { | |
$recentlisttmp = $processes[$([array]::IndexOf($processesMWH,$z))] | |
# Verifies the process is responding (or isn't responding but is on the whitelist) and isn't on the blacklist. If this isn't true then it's skipped, otherwise it's appended to the recentlist. | |
if ($($recentlisttmp.Responding -or $($Whitelist.Contains($recentlisttmp.name))) -and $(-not $blacklist.Contains($recentlisttmp.name))) { $recentlist += $recentlisttmp } | |
} | |
} catch { | |
$recentlist = @() | |
} | |
$recentlist = $recentlist + @("end") | |
return $recentlist | |
} | |
(getActive $scriptname $PID1) | |
} -ArgumentList $scriptname,$PID | |
} | |
# Function that monitors for a specific keypress as a trigger | |
# Thanks to, https://hinchley.net/articles/creating-a-key-logger-via-a-global-system-hook-using-powershell/ | |
function monitorKey { | |
param( | |
[int] | |
$scanCode = 55 | |
) | |
if ($(Get-Job -Name "checkforkey").State -eq "Running") { | |
sendKey ($scanCode) # Ends the keyboard monitor process by pressing the key | |
} | |
Remove-Job -Name "checkforkey" -Force | |
Start-Job -Name "checkforkey" -ScriptBlock { | |
param( | |
[int] | |
$scanCode = 55 | |
) | |
Write-Output $PID | |
function checkKey () { | |
param( | |
[int] | |
$scanCode1 = 55 | |
) | |
if (-not ([System.Management.Automation.PSTypeName]'Key').Type) { | |
Add-Type -TypeDefinition @" | |
using System; | |
using System.IO; | |
using System.Diagnostics; | |
using System.Runtime.InteropServices; | |
using System.Windows.Forms; | |
using System.Management.Automation; | |
using System.Management.Automation.Runspaces; | |
namespace Key { | |
public static class Program { | |
public const int WH_KEYBOARD_LL = 13; | |
public const int WM_KEYDOWN = 0x0100; | |
public static int scanCode = 55; | |
public static HookProc hookProc = HookCallback; | |
public static IntPtr hookId = IntPtr.Zero; | |
[StructLayout(LayoutKind.Sequential)] | |
public class KBDLLHOOKSTRUCT { | |
public uint vkCode; | |
public uint scanCode; | |
public KBDLLHOOKSTRUCTFlags flags; | |
public uint time; | |
public UIntPtr dwExtraInfo; | |
} | |
[Flags] | |
public enum KBDLLHOOKSTRUCTFlags : uint { | |
LLKHF_EXTENDED = 0x01, | |
LLKHF_INJECTED = 0x10, | |
LLKHF_ALTDOWN = 0x20, | |
LLKHF_UP = 0x80, | |
} | |
public static void Main() { | |
hookId = SetHook(hookProc); | |
Application.Run(); | |
UnhookWindowsHookEx(hookId); | |
} | |
public static void setScanCode(int newCode) { | |
scanCode = newCode; | |
Main(); | |
} | |
public static IntPtr SetHook(HookProc hookProc) { | |
IntPtr moduleHandle = GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName); | |
return SetWindowsHookEx(WH_KEYBOARD_LL, hookProc, moduleHandle, 0); | |
} | |
public delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam); | |
public static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { | |
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) { | |
KBDLLHOOKSTRUCT kbd = (KBDLLHOOKSTRUCT) Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT)); | |
Console.WriteLine("scancode: " + kbd.vkCode); // write scan code to console, uncomment this line when trying to find the scancode for a specific key | |
if (kbd.vkCode == scanCode) { | |
using (PowerShell initialPowerShell = PowerShell.Create(RunspaceMode.CurrentRunspace)){ | |
initialPowerShell.Commands.AddScript("Write-verbose \"" + ((kbd.vkCode).ToString()) + "\" -v"); | |
initialPowerShell.Invoke(); | |
} | |
Application.Exit(); | |
return (IntPtr)1; | |
} | |
} | |
return CallNextHookEx(hookId, nCode, wParam, lParam); | |
} | |
[DllImport("user32.dll")] | |
public static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, uint dwThreadId); | |
[DllImport("user32.dll")] | |
public static extern bool UnhookWindowsHookEx(IntPtr hhk); | |
[DllImport("user32.dll")] | |
public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); | |
[DllImport("kernel32.dll")] | |
public static extern IntPtr GetModuleHandle(string lpModuleName); | |
} | |
} | |
"@ -ReferencedAssemblies System.Windows.Forms | |
} | |
try { | |
$key = ([Key.Program]::setScanCode($scanCode1) 4>&1) | |
if (([int]($key.ToString())) -eq $scanCode1) { | |
return $true | |
} else { | |
return $false | |
} | |
} | |
catch { | |
return $false | |
} | |
} | |
checkKey ($scanCode) | |
} -ArgumentList $scanCode | Out-Null | |
} | |
# Emulates a keypress using the scancode. Used on exit. | |
function sendKey { | |
param( | |
[int] | |
$scanCode = 55 | |
) | |
Add-Type @" | |
using System; | |
using System.Collections.Generic; | |
using System.Runtime.InteropServices; | |
public static class KBEmulator { | |
public enum InputType : uint { | |
INPUT_MOUSE = 0, | |
INPUT_KEYBOARD = 1, | |
INPUT_HARDWARE = 3 | |
} | |
[Flags] | |
internal enum KEYEVENTF : uint | |
{ | |
KEYDOWN = 0x0, | |
EXTENDEDKEY = 0x0001, | |
KEYUP = 0x0002, | |
SCANCODE = 0x0008, | |
UNICODE = 0x0004 | |
} | |
[Flags] | |
internal enum MOUSEEVENTF : uint | |
{ | |
ABSOLUTE = 0x8000, | |
HWHEEL = 0x01000, | |
MOVE = 0x0001, | |
MOVE_NOCOALESCE = 0x2000, | |
LEFTDOWN = 0x0002, | |
LEFTUP = 0x0004, | |
RIGHTDOWN = 0x0008, | |
RIGHTUP = 0x0010, | |
MIDDLEDOWN = 0x0020, | |
MIDDLEUP = 0x0040, | |
VIRTUALDESK = 0x4000, | |
WHEEL = 0x0800, | |
XDOWN = 0x0080, | |
XUP = 0x0100 | |
} | |
// Master Input structure | |
[StructLayout(LayoutKind.Sequential)] | |
public struct lpInput { | |
internal InputType type; | |
internal InputUnion Data; | |
internal static int Size { get { return Marshal.SizeOf(typeof(lpInput)); } } | |
} | |
// Union structure | |
[StructLayout(LayoutKind.Explicit)] | |
internal struct InputUnion { | |
[FieldOffset(0)] | |
internal MOUSEINPUT mi; | |
[FieldOffset(0)] | |
internal KEYBDINPUT ki; | |
[FieldOffset(0)] | |
internal HARDWAREINPUT hi; | |
} | |
// Input Types | |
[StructLayout(LayoutKind.Sequential)] | |
internal struct MOUSEINPUT | |
{ | |
internal int dx; | |
internal int dy; | |
internal int mouseData; | |
internal MOUSEEVENTF dwFlags; | |
internal uint time; | |
internal UIntPtr dwExtraInfo; | |
} | |
[StructLayout(LayoutKind.Sequential)] | |
internal struct KEYBDINPUT | |
{ | |
internal short wVk; | |
internal short wScan; | |
internal KEYEVENTF dwFlags; | |
internal int time; | |
internal UIntPtr dwExtraInfo; | |
} | |
[StructLayout(LayoutKind.Sequential)] | |
internal struct HARDWAREINPUT | |
{ | |
internal int uMsg; | |
internal short wParamL; | |
internal short wParamH; | |
} | |
private class unmanaged { | |
[DllImport("user32.dll", SetLastError = true)] | |
internal static extern uint SendInput ( | |
uint cInputs, | |
[MarshalAs(UnmanagedType.LPArray)] | |
lpInput[] inputs, | |
int cbSize | |
); | |
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)] | |
public static extern short VkKeyScan(char ch); | |
} | |
internal static uint SendInput(uint cInputs, lpInput[] inputs, int cbSize) { | |
return unmanaged.SendInput(cInputs, inputs, cbSize); | |
} | |
public static void SendScanCode(short scanCode) { | |
lpInput[] KeyInputs = new lpInput[1]; | |
lpInput KeyInput = new lpInput(); | |
// Generic Keyboard Event | |
KeyInput.type = InputType.INPUT_KEYBOARD; | |
KeyInput.Data.ki.wScan = 0; | |
KeyInput.Data.ki.wVk = 0; | |
KeyInput.Data.ki.time = 0; | |
KeyInput.Data.ki.dwExtraInfo = UIntPtr.Zero; | |
// Push the correct key | |
KeyInput.Data.ki.wVk = scanCode; | |
KeyInput.Data.ki.dwFlags = KEYEVENTF.KEYDOWN; | |
KeyInputs[0] = KeyInput; | |
SendInput(1, KeyInputs, lpInput.Size); | |
// Release the key | |
KeyInput.Data.ki.dwFlags = KEYEVENTF.KEYUP; | |
KeyInputs[0] = KeyInput; | |
SendInput(1, KeyInputs, lpInput.Size); | |
return; | |
} | |
} | |
"@ | |
[KBEmulator]::SendScanCode($scanCode) | |
} | |
# Get Window | |
function getWindow { | |
# Thanks to https://gallery.technet.microsoft.com/scriptcenter/Get-the-position-of-a-c91a5f1f | |
# Thanks to https://github.com/ShareX/ShareX/blob/e81176a8398993d3208f9ca83b0422f6e53ef48d/ShareX.HelpersLib/Helpers/CaptureHelpers.cs#L310 | |
if (-not ([System.Management.Automation.PSTypeName]'Window').Type) { | |
Add-Type -AssemblyName UIAutomationClient | |
Add-Type @" | |
using System; | |
using System.Runtime.InteropServices; | |
public class Window { | |
[DllImport(@"dwmapi.dll")] | |
public static extern int DwmGetWindowAttribute(IntPtr hwnd, int dwAttribute, out RECT pvAttribute, int cbAttribute); | |
[DllImport("user32.dll")] | |
public static extern bool ShowWindowAsync(IntPtr hWnd, Int32 nCmdShow); | |
[DllImport("user32.dll")] | |
public static extern int SetForegroundWindow(IntPtr hwnd); | |
[DllImport("user32.dll")] | |
public static extern IntPtr GetForegroundWindow(); | |
[DllImport("user32.dll", SetLastError=true)] | |
public static extern int GetWindowLong(IntPtr hWnd, int nIndex); | |
public enum Dwmwindowattribute | |
{ | |
DwmwaExtendedFrameBounds = 9 | |
} | |
public static bool DWMWA_EXTENDED_FRAME_BOUNDS(IntPtr handle, out RECT rectangle) | |
{ | |
RECT rect; | |
var result = DwmGetWindowAttribute(handle, (int)Dwmwindowattribute.DwmwaExtendedFrameBounds, | |
out rect, Marshal.SizeOf(typeof(RECT))); | |
rectangle = rect; | |
return result >= 0; | |
} | |
} | |
public struct RECT | |
{ | |
public int Left; // x position of upper-left corner | |
public int Top; // y position of upper-left corner | |
public int Right; // x position of lower-right corner | |
public int Bottom; // y position of lower-right corner | |
} | |
"@ | |
} | |
#Prompt which window to display, https://docs.microsoft.com/en-us/powershell/scripting/samples/multiple-selection-list-boxes?view=powershell-6 | |
$form = New-Object System.Windows.Forms.Form | |
$form.Size = New-Object System.Drawing.Size (298,290) | |
$form.StartPosition = 'CenterScreen' | |
$form.ShowIcon = $False | |
$form.MaximizeBox = $false | |
$form.MinimizeBox = $False | |
$form.SizeGripStyle = "Hide" | |
$form.FormBorderStyle = "FixedDialog" | |
$form.ShowInTaskbar = $False | |
$form.text = 'Select an Window to Capture:' | |
$listBox = New-Object System.Windows.Forms.Listbox | |
$listBox.Location = New-Object System.Drawing.Point (10,10) | |
$listBox.Size = New-Object System.Drawing.Size (260,200) | |
$listboxhndl = @() | |
foreach ($process in $recentlist) { | |
# Exit when at the end of the list | |
if ($process -eq "end") {break} | |
# Use Process Description, main Window title, or process name (in that order) to populate list. We create a second list with the handles in the same order so we can use those again later. | |
$listboxhndl += $($process.MainWindowHandle) | |
if ($null -ne ($process.Description)) { | |
# Check if there are multiple processes with the same Description, if so include the ID in the selection | |
if (($recentlist.Description | Where-Object { $_ -eq $process.Description }).count -gt 1) { | |
$listBox.Items.Add("$($process.Description) - ID:$($process.id)") | |
} else { $listBox.Items.Add("$($process.Description)") } | |
} elseif ($null -ne ($process.MainWindowTitle) -and ($process.MainWindowTitle).length -lt 50) { # If the Window title is more than 50 characters long we just use the process name. | |
# Check if there are multiple processes with the same Window Title, if so include the ID in the selection | |
if (($recentlist.MainWindowTitle | Where-Object { $_ -eq $process.MainWindowTitle }).count -gt 1) { | |
$listBox.Items.Add("$($process.MainWindowTitle) - ID:$($process.id)") | |
} else { $listBox.Items.Add("$($process.MainWindowTitle)") } | |
} else { | |
# Check if there are multiple processes with the same name, if so include the ID in the selection | |
if (($recentlist.Name | Where-Object { $_ -eq $process.Name }).count -gt 1) { | |
$listBox.Items.Add("$((Get-Culture).TextInfo.ToTitleCase($process.Name)) - ID:$($process.id)") | |
} else { $listBox.Items.Add("$((Get-Culture).TextInfo.ToTitleCase($process.Name))") } | |
} | |
} | |
$listbox.SetSelected(0,$true) | |
$form.Controls.Add($listBox) | |
$OKButton = New-Object System.Windows.Forms.Button | |
$OKButton.Location = New-Object System.Drawing.Point (60,220) | |
$OKButton.Size = New-Object System.Drawing.Size (75,23) | |
$OKButton.text = 'OK' | |
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::Ok | |
$form.AcceptButton = $OKButton | |
$form.Controls.Add($OKButton) | |
$CancelButton = New-Object System.Windows.Forms.Button | |
$CancelButton.Location = New-Object System.Drawing.Point (150,220) | |
$CancelButton.Size = New-Object System.Drawing.Size (75,23) | |
$CancelButton.text = 'Cancel' | |
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel | |
$form.CancelButton = $CancelButton | |
$form.Controls.Add($CancelButton) | |
$form.Topmost = $true | |
# Display Window Prompt | |
$result = $form.ShowDialog() | |
if ($result -eq [System.Windows.Forms.DialogResult]::Ok) | |
{ | |
# Get Window from List | |
$w = $listBox.SelectedItems | |
$WindowObject = $recentlist | Where-Object { $_.MainWindowHandle -eq $($listboxhndl[$([array]::IndexOf($($listBox.Items),$([string]$w)))]) } | ForEach-Object { | |
# Reorder Recents List to move selected item to top of list | |
$global:recentlist = @($_) + ($recentlist -ne $_) | |
# Get Window Info | |
[int]$Handle = $_.MainWindowHandle | |
$WindowLong = [string]$([Window]::GetWindowLong($Handle,-16)) | |
$global:ScriptHandle = [Window]::GetForegroundWindow() | |
# Check if one Windows 10 | |
if ($OSVer -ge 10){ if ($OSBuild -ge 14392){ | |
# Make Workspace with Window Visable. | |
([VirtualDesktop.Desktop]::FromWindow($Handle)).MakeVisible() | |
} | |
} | |
# Check if Window is Maxmized or not. Show the window in the same way. | |
if ($WindowLong -eq 399441920 -or $WindowLong -eq -1781596160) { [Window]::ShowWindowAsync($Handle,3) } else { [Window]::ShowWindowAsync($Handle,4) } | |
[Window]::SetForegroundWindow($Handle) | |
Start-Sleep -Milliseconds 200 | |
$Rectangle = New-Object RECT | |
$Return = [Window]::DWMWA_EXTENDED_FRAME_BOUNDS($Handle,[ref]$Rectangle) | |
if ($Return) { | |
$Height = $Rectangle.bottom - $Rectangle.Top | |
$Width = $Rectangle.right - $Rectangle.left | |
$Size = New-Object System.Management.Automation.Host.Size -ArgumentList $Width,$Height | |
$TopLeft = New-Object System.Management.Automation.Host.Coordinates -ArgumentList $Rectangle.left,$Rectangle.Top | |
$BottomRight = New-Object System.Management.Automation.Host.Coordinates -ArgumentList $Rectangle.right,$Rectangle.bottom | |
$Object = [pscustomobject]@{ | |
Size = $Size | |
TopLeft = $TopLeft | |
BottomRight = $BottomRight | |
} | |
$Object.PSTypeNames.insert(0,'System.Automation.WindowInfo') | |
$Object | |
} | |
} | |
# Set border to the window size. | |
# Old Code, didn't work in many monitor configurations (specificially ones I was trying to use lol) | |
# This has Multimonitor support but it could probably be improved... Not sure specifically how though. Written trial by fire style since there are so many monitor configs. | |
# Supporting them all is kinda impossible but this code hopefully interates on the older versions and supports more monitor configs. ? | |
[int]$monitorRight = $([math]::abs($Screen.Width - $([int]$WindowObject.BottomRight.x) + $Screen.Left)) | |
[int]$monitorBottom = $([math]::abs($Screen.height - $([int]$WindowObject.BottomRight.y) + $Screen.Top)) | |
# Fix Problem Apps, certain apps return the wrong size. This corrects it but requires that the app be manaully added to the list and so is currently disabled until it can be improved. | |
#$promlemList = "Microsoft Outlook.*|foo.*" | |
#$check = [regex]::matches($w, $problemList) | |
#if ($check.groups.count -gt 0) { | |
#$monitorRight = $monitorRight - 8 | |
#$monitorBottom = $monitorBottom + 8 | |
#} | |
[int]$monitorLeft = $screen.width - ([int]$monitorRight + [int]$WindowObject.Size.width) | |
[int]$monitorTop = $Screen.Height - ([int]$monitorBottom + [int]$WindowObject.Size.height) | |
if ($monitorLeft -lt 0) { | |
$monitorRight = $monitorRight - $monitorLeft | |
$monitorLeft = 0 | |
} | |
if ($monitorTop -lt 0) { | |
$monitorBottom = $monitorBottom - $monitorTop | |
$monitorTop = 0 | |
} | |
if ($([int]$WindowObject.BottomRight.x) -gt $Screen.width) { $monitorRight = 0 } | |
if ($([int]$WindowObject.BottomRight.y) -gt $Screen.height) { $monitorBottom = 0 } | |
$Border.BorderThickness = "$monitorLeft, $monitorTop, $monitorRight, $monitorBottom" # Set Border | |
$global:state = 3 # Crop Image and Display | |
} | |
else { | |
$global:state = 1 # Reset | |
} | |
} | |
# Function Takes the current size and crops the framebuffer | |
function cropImage { | |
if (-not $(Test-Path "$File.png")) { | |
$Window.height = 0 | |
$Window.Opacity = 0 | |
if ($Window.height -eq 0) { | |
# Get drawn rectangle and take screenshot | |
$bitmap = New-Object System.Drawing.Bitmap $($Screen.width - [int]$($border.BorderThickness.left + $border.BorderThickness.right)),$($Screen.height - [int]$($border.BorderThickness.Top + $border.BorderThickness.bottom)) | |
if (-not $($bitmap.Size)) { | |
# If no border was drawn then take screenshot of entire screen | |
$bitmap = New-Object System.Drawing.Bitmap $($Screen.width),$($Screen.height) | |
$graphic = [System.Drawing.Graphics]::FromImage($bitmap) | |
$graphic.CopyFromScreen($Screen.X,$Screen.Y,0,0,$bitmap.Size) | |
} | |
else { | |
$graphic = [System.Drawing.Graphics]::FromImage($bitmap) | |
$graphic.CopyFromScreen($($border.BorderThickness.left + $Screen.X),$($border.BorderThickness.Top + $Screen.Y),0,0,$bitmap.Size) | |
} | |
# Save Image to Stream | |
$Stream = New-Object System.IO.MemoryStream | |
$bitmap.Save($Stream,'PNG') | |
$bitmap.close() | |
$Window.Cursor = "Arrow" | |
# Save Stream to File | |
$Save = New-Object IO.FileStream "$File.png",'Append','Write','Read' | |
$Stream.WriteTo($Save) | |
$Save.close() | |
$Save.Dispose() | |
# Set Border color to windows Accent, https://stackoverflow.com/a/33058136 | |
Add-Type @" | |
using System; | |
using System.Runtime.InteropServices; | |
using System.Windows; | |
public static class NativeMethods | |
{ | |
[DllImport("dwmapi.dll", EntryPoint="#127")] | |
public static extern void DwmGetColorizationParameters(ref DWMCOLORIZATIONcolors colors); | |
public static uint red(DWMCOLORIZATIONcolors colors) | |
{ | |
return (byte)(colors.ColorizationColor >> 16); | |
} | |
public static uint green(DWMCOLORIZATIONcolors colors) | |
{ | |
return (byte)(colors.ColorizationColor >> 8); | |
} | |
public static uint blue(DWMCOLORIZATIONcolors colors) | |
{ | |
return (byte)(colors.ColorizationColor); | |
} | |
} | |
public struct DWMCOLORIZATIONcolors | |
{ | |
public uint ColorizationColor, | |
ColorizationAfterglow, | |
ColorizationColorBalance, | |
ColorizationAfterglowBalance, | |
ColorizationBlurBalance, | |
ColorizationGlassReflectionIntensity, | |
ColorizationOpaqueBlend; | |
} | |
"@ | |
$color = New-Object DWMCOLORIZATIONcolors | |
[NativeMethods]::DwmGetColorizationParameters([ref]$color) | |
$Border.BorderBrush = "" + $("#" + "FF" + [Convert]::ToString(([NativeMethods]::red($color) * 3 / 4),16).ToUpper().PadLeft(2,'0') + [Convert]::ToString(([NativeMethods]::green($color) * 3 / 4),16).ToUpper().PadLeft(2,'0') + [Convert]::ToString(([NativeMethods]::blue($color) * 3 / 4),16).ToUpper().PadLeft(2,'0')) | |
# Set background to Cropped Image | |
$cropped.Source = "$File.png" | |
$cropped.Opacity = 1 | |
$Border.Opacity = 1 | |
$dashed.Opacity = 0 | |
$Window.height = $Screen.height | |
$Window.background = "#64000000" | |
$Window.Opacity = 1 | |
if ($(($border.BorderThickness.bottom + $border.BorderThickness.Top) - $Window.height) -ge 0) { | |
$Border.BorderThickness = "0,0,0,0" | |
} | |
$global:state = 4 # Prompt to save | |
} | |
} | |
} | |
# Function saves the screenshot. | |
function saveScreenshot { | |
if ($screenshotcounter -gt 1) { $filename = "$Name" + "_" + $screenshotcounter + ".png" } else { $filename = "$Name.png" } | |
if (([System.Management.Automation.PSTypeName]'Window').Type) { | |
if ($OSBuild -ge 14392) { ([VirtualDesktop.Desktop]::FromWindow($ScriptHandle)).MakeVisible() } # Set Workspace to same as script | |
[Window]::SetForegroundWindow($ScriptHandle) # Set Window as Active | |
} | |
start-sleep -Milliseconds 100 | |
[Window]::SetForegroundWindow($ScriptHandle) | |
$oReturn = [System.Windows.Forms.MessageBox]::Show("Save: " + """$filename""`r`n@ ""$Folder\""?","Save",[System.Windows.Forms.MessageBoxButtons]::OkCancel,[System.Windows.Forms.MessageBoxIcon]::Question) | |
switch ($oReturn) { | |
"Ok" { | |
$Border.Opacity = "0" | |
$cropped.Opacity = "0" | |
$cropped.Source = $Stream | |
[gc]::Collect() | |
[gc]::WaitForPendingFinalizers() | |
if ($(Test-Path "$File.png")) { | |
$global:screenshotcounter++ | |
$global:File = "$Folder\" + "$Name" + "_" + $screenshotcounter | |
$oReturn = [System.Windows.Forms.MessageBox]::Show("Take another screenshot?","",[System.Windows.Forms.MessageBoxButtons]::YesNo,[System.Windows.Forms.MessageBoxIcon]::Question) | |
switch ($oReturn) { | |
"Yes" { | |
$Border.BorderBrush = "#00000000" | |
$Window.Cursor = "Cross" | |
$global:state = 0 # Waiting | |
} | |
"No" { | |
if ($runInSystray -eq "true" -or $runInSystray -eq "1") { | |
$Window.background = "#64000000" | |
$cropped.Source = $Stream | |
[gc]::Collect() | |
[gc]::WaitForPendingFinalizers() | |
$global:ResetFilename = $true | |
# Check that file exist | |
if (Test-Path "$Folder\$Name.png") { | |
if ($OpenImages -eq "true" -or $OpenImages -eq "1") { # Open in editor of choice | |
Get-Item "$Folder\$Name*.png" | Invoke-Item | |
} | |
if ($OpenFolder -eq "true" -or $OpenFolder -eq "1") { # Open folder | |
Invoke-Item "$Folder\" | |
} | |
} | |
monitorKey ($scanCode) | |
$global:state = 99 | |
} else { | |
$Window.background = "Black" | |
$Window.height = 0 | |
$Window.close() | |
} | |
} | |
} | |
} | |
} | |
"Cancel" { | |
if ($runInSystray -eq "true" -or $runInSystray -eq "1") { | |
$global:ResetFilename = $true | |
} | |
$global:state = 1 # Reset | |
} | |
} | |
} | |
# Setup program vars | |
$global:screenshotcounter = 1 | |
$File = "$Folder\" + "$Name" | |
$global:state = 99 #Waiting | |
$Screen = [System.Windows.Forms.SystemInformation]::VirtualScreen | |
$ResetFilename = $false | |
# Setup Menubar | |
if ($runInSystray -eq "true" -or $runInSystray -eq "1") { | |
$ResetFilename = $true | |
function New-MenuItem { | |
param( | |
[string] | |
$Text = "Placeholder Text", | |
$MyScriptPath, | |
$ScriptVariables, | |
$function, | |
[switch] | |
$ExitOnly = $false | |
) | |
#Initialization | |
$MenuItem = New-Object System.Windows.Forms.MenuItem | |
#Apply desired text | |
if ($Text) { | |
$MenuItem.text = $Text | |
} | |
#Apply click event logic | |
if ($MyScriptPath -and !$ExitOnly) { | |
$MenuItem | Add-Member -Name MyScriptPath -Value $MyScriptPath -MemberType NoteProperty | |
$MenuItem.Add_Click({ | |
try { | |
$MyScriptPath = $This.MyScriptPath #Used to find proper path during click event | |
if (Test-Path $MyScriptPath) { | |
Start-Process -FilePath "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -ArgumentList "-NoProfile -NoLogo -ExecutionPolicy Bypass -File `"$MyScriptPath`" $ScriptVariables" -ErrorAction Stop | |
} else { | |
throw "Could not find at path: $MyScriptPath" | |
} | |
} catch { | |
$Text = $This.text | |
[System.Windows.Forms.MessageBox]::Show("Failed to launch $Text`n`n$_") > $null | |
} | |
}) | |
} | |
#Call Function on click event instead | |
if ($function -and !$ExitOnly) { | |
$MenuItem | Add-Member -Name function -Value $function -MemberType NoteProperty | |
$MenuItem.Add_Click({ | |
try { | |
$function = $This.function #Used to find proper path during click event | |
& "$function" | |
} catch { | |
$Text = $This.text | |
[System.Windows.Forms.MessageBox]::Show("Failed to call &$Text`n`n$_") > $null | |
} | |
}) | |
} | |
#Provide a way to exit the launcher | |
if ($ExitOnly -and !$MyScriptPath) { | |
$MenuItem.Add_Click({ | |
$Form.close() | |
$Window.close() | |
}) | |
} | |
#Return our new MenuItem | |
$MenuItem | |
} | |
#Create Form to serve as a container for our components | |
$Form = New-Object System.Windows.Forms.Form | |
#Configure our form to be hidden | |
$Form.BackColor = "Magenta" #Pick a color you won't use again and match it to the TransparencyKey property | |
$Form.TransparencyKey = "Magenta" | |
$Form.ShowInTaskbar = $false | |
$Form.FormBorderStyle = "None" | |
# base64 encoded icon | |
$base64 = "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" | |
# Create a streaming image by streaming the base64 string to a bitmap streamsource | |
$bitmap = New-Object System.Windows.Media.Imaging.BitmapImage | |
$bitmap.BeginInit() | |
$bitmap.StreamSource = [System.IO.MemoryStream][System.Convert]::FromBase64String($base64) | |
$bitmap.EndInit() | |
$bitmap.Freeze() | |
# Convert the bitmap into an icon | |
$image = [System.Drawing.Bitmap][System.Drawing.Image]::FromStream($bitmap.StreamSource) | |
$icon = [System.Drawing.Icon]::FromHandle($image.GetHicon()) | |
#Initialize/configure necessary components | |
$SystrayLauncher = New-Object System.Windows.Forms.NotifyIcon | |
$SystrayLauncher.Icon = $icon | |
$SystrayLauncher.text = "Screenshot" | |
$SystrayLauncher.Visible = $true | |
$ContextMenu = New-Object System.Windows.Forms.ContextMenu | |
$takeScreenshot = New-MenuItem -text "Take Screenshot" -Function "takescreenshot" | |
$about = New-MenuItem -text "About" -Function "about" | |
#$RestartRemoteComputer = New-MenuItem -Text "Restart Remote PC" -MyScriptPath "C:\scripts\restartpc.ps1" | |
$ExitLauncher = New-MenuItem -text "Exit" -ExitOnly | |
#Add menu items to context menu | |
$ContextMenu.MenuItems.AddRange($takeScreenshot) | |
$ContextMenu.MenuItems.AddRange($about) | |
#$ContextMenu.MenuItems.AddRange($RestartRemoteComputer) | |
$ContextMenu.MenuItems.AddRange($ExitLauncher) | |
#Add components to our form | |
$SystrayLauncher.ContextMenu = $ContextMenu | |
$SystrayLauncher.add_MouseDown({ | |
if ($_.Button -eq [System.Windows.Forms.MouseButtons]::left) { | |
takescreenshot | |
} else { | |
$SystrayLauncher.Show($SystrayLauncher.ContextMenu,0) | |
} | |
}) | |
} | |
# Thanks, https://blogs.technet.microsoft.com/stephap/2012/04/23/building-forms-with-powershell-part-1-the-form/ | |
# Build the GUI for the screenshot screen | |
[xml]$xaml = @" | |
<Window | |
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |
x:Name="Window" WindowStartupLocation = "0" Title="Screenshot" | |
Width = "0" Height = "0" ShowInTaskbar = "true" ResizeMode = "NoResize" | |
Topmost = "True" WindowStyle = "0" AllowsTransparency="True" Background="#64000000" > | |
<Border BorderBrush="#00000000" BorderThickness="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Name="Border" Width = "80" Height = "200" Margin="0" Opacity="0" > | |
<Grid ShowGridLines='False'> | |
<Grid.ColumnDefinitions> | |
<ColumnDefinition Width="*"/> | |
</Grid.ColumnDefinitions> | |
<Grid.RowDefinitions> | |
<RowDefinition Height = '*'/> | |
</Grid.RowDefinitions> | |
<Rectangle x:Name='outline' Stroke="White" StrokeThickness="1"/> | |
<Rectangle x:Name='dashed' Stroke="#CB000000" StrokeDashArray="4,3" StrokeThickness="3"/> | |
<Image x:Name='cropped' Stretch="None"></Image> | |
</Grid> | |
</Border> | |
</Window> | |
"@ | |
$reader = (New-Object System.Xml.XmlNodeReader $xaml) | |
$Window = [Windows.Markup.XamlReader]::Load($reader) | |
# region Connect to Controls | |
$xaml.SelectNodes("//*[@*[contains(translate(name(.),'n','N'),'Name')]]") | ForEach-Object { | |
New-Variable -Name $_.Name -Value $Window.FindName($_.Name) -Force -ErrorAction SilentlyContinue -Scope Global | |
} | |
# init Cursor location | |
$global:downx = 0 | |
$global:downy = 0 | |
$global:firstrun = $true | |
$global:counter = 10000 | |
$Window.Add_SourceInitialized({ | |
# init Window | |
if ($runInSystray -eq "true" -or $runInSystray -eq "1") { | |
$Window.width = 0 | |
$Border.width = 0 | |
$Window.height = 0 | |
$Border.height = 0 | |
} else { | |
$Window.width = $Screen.width | |
$Border.width = $Screen.width | |
$Window.height = $Screen.width | |
$Border.height = $Screen.width | |
} | |
$Window.left = $Screen.Left | |
$Window.Top = $Screen.Top | |
$outline.Stroke = $BorderColor | |
$Color = [System.Drawing.Color]::FromName($BorderColor) | |
$Border.background = "" + $("#" + "64" + [Convert]::ToString($Color.R,16).ToUpper().PadLeft(2,'0') + [Convert]::ToString($Color.G,16).ToUpper().PadLeft(2,'0') + [Convert]::ToString($Color.B,16).ToUpper().PadLeft(2,'0')) | |
# Setup Timer, this loops and checks the current application state taking the correct action. | |
$Script:timer = New-Object System.Windows.Threading.DispatcherTimer | |
$timer.Interval = [timespan]"0:0:0.001" | |
$timer.Add_Tick({ | |
if ($firstrun -eq $true) { | |
$global:scripthandle = $((Get-Process -id $PID).MainWindowHandle) | |
$Window.ShowInTaskbar = $false | |
$global:firstrun = $false | |
} | |
if ($global:state -eq 2) { # Init Draw Boundry | |
if (-not $(Test-Path "$File.png")) { | |
$Window.background = "#01000000" | |
$Border.BorderBrush = "#64000000" | |
$Border.Opacity = "1" | |
$dashed.Opacity = 1 | |
$Mouse = [System.Windows.Forms.Cursor]::Position | |
$global:downx = $Mouse.x - $Screen.Left | |
$global:downy = $Mouse.y - $Screen.Top | |
$newright = $Screen.width - $downx | |
$newbottom = $Screen.height - $downy | |
$Border.BorderThickness = "$downx,$downy,$newright,$newbottom" | |
$global:state = 0 | |
} | |
else { | |
while (Test-Path "$File.png") { | |
$global:screenshotcounter++ | |
$global:File = "$Folder\" + "$Name" + "_" + $screenshotcounter | |
} | |
$oReturn = [System.Windows.Forms.MessageBox]::Show($("Specified Filename already exists, saving as `r`n" + $File + ".png"),"",[System.Windows.Forms.MessageBoxButtons]::Ok) | |
$Border.BorderBrush = "#00000000" | |
$Window.Cursor = "Cross" | |
$global:state = 0 # Waiting | |
} | |
} | |
if ($global:state -eq 3) { # Crop Image and Display | |
cropImage | |
} | |
if ($global:state -eq 4) { # Prompt to Save Screenshots | |
saveScreenshot | |
} | |
if ($global:state -eq 5) { # Exit | |
$oReturn = [System.Windows.Forms.MessageBox]::Show("Exit without saving?","Exit",[System.Windows.Forms.MessageBoxButtons]::OkCancel,[System.Windows.Forms.MessageBoxIcon]::Warning) | |
switch ($oReturn) { | |
"OK" { | |
if ($runInSystray -eq "true" -or $runInSystray -eq "1") { | |
# Check that file exist | |
if (Test-Path "$Folder\$Name.png") { | |
if ($OpenImages -eq "true" -or $OpenImages -eq "1") { # Open in editor of choice | |
Get-Item "$Folder\$Name*.png" | Invoke-Item | |
} | |
if ($OpenFolder -eq "true" -or $OpenFolder -eq "1") { # Open folder | |
Invoke-Item "$Folder\" | |
} | |
} | |
monitorKey ($scanCode) | |
$monitorKeyPID = Receive-Job -Name "checkforkey" | |
$Window.background = "#64000000" | |
$global:state = 99 | |
} else { | |
$Window.background = "Black" | |
$Window.height = 0 | |
$Window.close() | |
} | |
} | |
"Cancel" { | |
$global:state = $returnState | |
} | |
} | |
} | |
if ($global:state -eq 6) { # Get Window | |
getWindow | |
} | |
if ($global:state -eq 1) { # Reset | |
$Border.Opacity = "0" | |
$cropped.Opacity = "0" | |
$cropped.Source = $Stream | |
[gc]::Collect() | |
[gc]::WaitForPendingFinalizers() | |
Remove-Item "$File.png" -Force | |
if (-not $(Test-Path "$File.png")) { | |
$Window.background = "#64000000" | |
$Window.Cursor = "Cross" | |
$global:state = 0 | |
} | |
} | |
if ($global:state -eq 99) { # Waiting | |
#GC | |
if ($global:counter -ge 5000) { | |
[gc]::Collect() | |
[gc]::WaitForPendingFinalizers() | |
$global:counter = 0 | |
} else { | |
$global:counter = $global:counter + 1 | |
} | |
if ($runInSystray -eq "true" -or $runInSystray -eq "1") { | |
$Window.width = 0 | |
$Border.width = 0 | |
$Window.height = 0 | |
$Border.height = 0 | |
$keypressed = (Receive-Job -Name "checkforkey") | |
if ($keypressed -eq $true) { | |
takescreenshot | |
} | |
$queued = Resolve-Path $([System.IO.Path]::GetTempPath() + "screenshot.queue") 2> $null | |
if ($queued) { | |
Remove-Item $([System.IO.Path]::GetTempPath() + "screenshot.queue") | |
takescreenshot | |
} | |
$quitnow = Resolve-Path $([System.IO.Path]::GetTempPath() + "screenshot.quit") 2> $null | |
if ($quitnow) { | |
Remove-Item -Force $([System.IO.Path]::GetTempPath() + "screenshot.quit") | |
start-sleep -Milliseconds 100 | |
$Form.close() | |
$Window.close() | |
} | |
} else { | |
takescreenshot | |
} | |
} | |
if ($global:state -eq 0) { # Currently Drawing Border | |
$Mouse = [System.Windows.Forms.Cursor]::Position | |
#Old Code | |
#$x = $Mouse.x | |
#$y = $Mouse.y | |
#New Multimonitor code | |
$x = $Mouse.x - $Screen.Left | |
$y = $Mouse.y - $Screen.Top | |
$bottom = $border.BorderThickness.bottom | |
# Get the Active Windows List | |
if (($recentlist)[-1] -ne "end") { | |
$global:recentlist = $global:recentlist + (receive-job -Name "activewindows") | |
} | |
# Top Left | |
if (($x -lt $downx) -and ($y -lt $downy)) { | |
$newright = $Window.width - $downx | |
$newbottom = $Window.height - $downy | |
$Border.BorderThickness = "$x,$y,$newright,$newbottom" | |
} | |
# Top Right | |
if (($x -lt $downx) -and ($y -ge $downy)) { | |
$newright = $Window.width - $downx | |
$newbottom = $Window.height - $y | |
$Border.BorderThickness = "$x,$downy,$newright,$newbottom" | |
} | |
# Bottom Left | |
if (($x -ge $downx) -and ($y -lt $downy)) { | |
$newright = $Window.width - $x | |
$newbottom = $Window.height - $downy | |
$Border.BorderThickness = "$downX,$y,$newright,$newbottom" | |
} | |
# Bottom Right | |
if (($x -ge $downx) -and ($y -ge $downy)) { | |
$newright = $Window.width - $x | |
$newbottom = $Window.height - $y | |
$Border.BorderThickness = "$downx,$downy,$newright,$newbottom" | |
} | |
} | |
}) | |
# Start Monitoring for Key | |
if ($runInSystray -eq "true" -or $runInSystray -eq "1") { | |
monitorKey ($scanCode) | |
$monitorKeyPID = Receive-Job -Name "checkforkey" | |
} | |
# Start timer | |
$timer.Start() | |
if (-not $timer.IsEnabled) { | |
$Window.close() | |
} | |
}) | |
$Window.Add_Closed({ | |
# Cleanup | |
sendKey ($scanCode) # Ends the keyboard monitor process by pressing the key | |
Remove-Job -Name "checkforkey" | |
$Script:Timer.Stop() | |
$Stream.close() | |
[gc]::Collect() | |
[gc]::WaitForPendingFinalizers() | |
}) | |
$Window.Add_MouseRightButtonUp({ | |
if ($global:state -ne 99) { | |
$returnState = $global:state | |
$global:state = 5 # Exit | |
} | |
}) | |
$Window.Add_MouseLeftButtonDown({ | |
if ($global:state -ne 99) { | |
$global:state = 2 # Drawing Boundry | |
} | |
}) | |
$Window.Add_MouseLeftButtonUp({ | |
if ($global:state -ne 99) { | |
$global:state = 3 # Crop Image and Display | |
} | |
}) | |
$Window.Add_KeyDown({ | |
if ($global:state -ne 99) { | |
if (($_.Key -eq "Escape") -or ($_.Key -eq "Enter")) { | |
$returnState = $global:state | |
$global:state = 5 # Exit | |
} | |
elseif ($_.Key -eq "Space") { | |
[System.Windows.Forms.Messagebox]::Show($("Filename: $File.png"),"",[System.Windows.Forms.MessageBoxButtons]::Ok,[System.Windows.Forms.MessageBoxIcon]::Information) # Filename | |
} | |
elseif ($_.Key -eq "Tab" -or $_.Key -eq "Shift" -or $_.Key -eq "Rightshift") { | |
# Check if the recent list has been returned, if not try and loop to get it. | |
if (($recentlist)[-1] -eq "end") { | |
$global:state = 6 # Get Window size and crop | |
} else { | |
if ($c -ge 40) {$c = 30} else {$c = 0} | |
while ($c -le 40) { | |
start-sleep -Milliseconds 50 | |
$global:recentlist = $global:recentlist + (receive-job -Name "activewindows") | |
if (($recentlist)[-1] -eq "end") {$c = 40} | |
$c++ | |
} | |
if (($recentlist)[-1] -eq "end") { | |
$global:state = 6 # Get Window size and crop | |
} else { [System.Windows.Forms.Messagebox]::Show(("The Active Windows list is still loading or there was an error in getting the list. Please try again in a moment."),"",[System.Windows.Forms.MessageBoxButtons]::Ok,[System.Windows.Forms.MessageBoxIcon]::Error) } | |
} | |
} | |
elseif ([string]$_.Key -match '^(D|NumPad)[0-9]+$') { | |
$monitorCount = ([System.Windows.Forms.SystemInformation]::MonitorCount) | |
# If 0 take screenshot of entire desktop | |
if (($_.Key -replace '\D+([0-9]+)','$1') -eq 0) { | |
$global:state = 99 # Do nothing for a second. | |
$Border.BorderThickness = "0,0,0,0" | |
$global:state = 3 # Crop Image and Display | |
} | |
# If larger than the number of monitors then generate error. | |
elseif (($_.Key -replace '\D+([0-9]+)','$1') -gt $monitorCount) { | |
[System.Windows.Forms.Messagebox]::Show($("Monitor " + [string]($_.Key -replace '\D+([0-9]+)','$1') + " does not exist."),"",[System.Windows.Forms.MessageBoxButtons]::Ok,[System.Windows.Forms.MessageBoxIcon]::Information) | |
} | |
# Take screenshot of monitor. | |
# Rewrote in version 5 for multimonitor support. | |
elseif (($_.Key -replace '\D+([0-9]+)','$1') -le $monitorCount) { | |
$global:state = 99 # Do nothing for a second. | |
# This gets the bounds of the monitor # of the key you pressed. | |
if (([System.Windows.Forms.Screen]::AllScreens -match ("display")).bounds.Y -lt 0) { | |
if (([System.Windows.Forms.Screen]::AllScreens -match ("display" + ($_.Key -replace '\D+([0-9]+)','$1'))).bounds.Y -lt 0) { | |
[int]$monitorTop = "0" | |
} else { | |
[int]$monitorTop = $Screen.Height - ([System.Windows.Forms.Screen]::AllScreens -match ("display" + ($_.Key -replace '\D+([0-9]+)','$1'))).bounds.Height | |
} | |
[int]$monitorBottom = "0" | |
} else { | |
[int]$monitorTop = ([System.Windows.Forms.Screen]::AllScreens -match ("display" + ($_.Key -replace '\D+([0-9]+)','$1'))).bounds.Top | |
[int]$monitorBottom = ($Screen.height - ([System.Windows.Forms.Screen]::AllScreens -match ("display" + ($_.Key -replace '\D+([0-9]+)','$1'))).bounds.bottom) | |
} | |
if (([System.Windows.Forms.Screen]::AllScreens -match ("display")).bounds.X -lt 0) { | |
[int]$monitorLeft = ([System.Windows.Forms.Screen]::AllScreens -match ("display" + ($_.Key -replace '\D+([0-9]+)','$1'))).bounds.Width - [Math]::abs(([System.Windows.Forms.Screen]::AllScreens -match ("display" + ($_.Key -replace '\D+([0-9]+)','$1'))).bounds.X) | |
[int]$monitorRight = ($Screen.width - ([System.Windows.Forms.Screen]::AllScreens -match ("display" + ($_.Key -replace '\D+([0-9]+)','$1'))).bounds.width - ([System.Windows.Forms.Screen]::AllScreens -match ("display" + ($_.Key -replace '\D+([0-9]+)','$1'))).bounds.Right) | |
} else { | |
[int]$monitorLeft = ([System.Windows.Forms.Screen]::AllScreens -match ("display" + ($_.Key -replace '\D+([0-9]+)','$1'))).bounds.left | |
[int]$monitorRight = ($Screen.width - ([System.Windows.Forms.Screen]::AllScreens -match ("display" + ($_.Key -replace '\D+([0-9]+)','$1'))).bounds.right) | |
} | |
$Border.BorderThickness = "$monitorLeft, $monitorTop, $monitorRight, $monitorBottom" # Set Border | |
$global:state = 3 # Crop Image and Display | |
} | |
} | |
# Konami Code easter egg :P | |
elseif ([string]$_.Key -match '^(Up|Down|Left|Right)$') { | |
$global:konami = @($global:konami + @([string]$_.Key)) | |
if ($konami.length -ge 8) { | |
[array]::Reverse($konami) | |
if ($konami[0] -eq "Right" -and $konami[1] -eq "Left" -and $konami[2] -eq "Right" -and $konami[3] -eq "Left" -and $konami[4] -eq "Down" -and $konami[5] -eq "Down" -and $konami[6] -eq "Up" -and $konami[7] -eq "Up") { | |
$base64 = "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" | |
$bitmap = New-Object System.Windows.Media.Imaging.BitmapImage | |
$bitmap.BeginInit() | |
$bitmap.StreamSource = [System.IO.MemoryStream][System.Convert]::FromBase64String($base64) | |
$bitmap.EndInit() | |
$bitmap.Freeze() | |
$img = [System.Drawing.Image]::FromStream($bitmap.StreamSource) | |
$form = new-object Windows.Forms.Form | |
$form.Width = $img.Size.Width; | |
$form.Height = $img.Size.Height; | |
$form.FormBorderStyle = "none" | |
$form.MaximizeBox = $false | |
$form.MinimizeBox = $false | |
$form.BackColor = "Gray" | |
$form.TransparencyKey = "Gray" | |
$form.startposition = "centerscreen" | |
$form.ShowInTaskbar = $false | |
$pictureBox = new-object Windows.Forms.PictureBox | |
$pictureBox.Width = $img.Size.Width; | |
$pictureBox.Height = $img.Size.Height; | |
$pictureBox.Image = $img; | |
$pictureBox.Add_Click({$form.close()}) | |
$form.controls.add($pictureBox) | |
$form.TopMost = $true; | |
$Wi.ShowInTaskbar | |
$form.ShowDialog() | |
$global:konami = @() | |
} | |
[array]::Reverse($konami) | |
} | |
} | |
else { | |
# Controls | |
[System.Windows.Forms.Messagebox]::Show($("Script Controls`r`n————————————————————————————`r`n`r`nLeft Mouse`t—`tDraw Boundry`r`n`r`nTab/Shift`t`t—`tCapture window`r`n`r`n`t`t`t0 captures the entire desktop, `r`nNumber Keys`t—`t1 for the first monitor,`r`n`t`t`t2 for the second, etc...`r`n`r`nEnter/`r`nEscape/`t`t—`tExit`r`nRight Mouse`r`n`r`nSpace`t`t—`tGet current filename"),"Controls",[System.Windows.Forms.MessageBoxButtons]::Ok) | |
} | |
} | |
}) | |
[void]$Window.ShowDialog() | |
}).AddParameters($ParamList) | |
$Runspacehash.psCmd.Invoke() | |
$Runspacehash.psCmd.Dispose() | |
# Check that file exist | |
if ($runInSystray -eq "false" -or $runInSystray -eq "0") { | |
if (Test-Path "$Directory\$FileName.png") { | |
if ($OpenImages -eq "true" -or $OpenImages -eq "1") { # Open in editor of choice | |
Get-Item "$Directory\$FileName*.png" | Invoke-Item | |
} | |
if ($OpenFolder -eq "true" -or $OpenFolder -eq "1") { # Open folder | |
Invoke-Item "$Directory\" | |
} | |
} | |
} | |
#Show Powershell window again | |
if ($HidePowershell -eq "true" -or $HidePowershell -eq "1") { | |
if ($null -eq $(Get-CimInstance win32_process | Where-Object { $_.processname -eq 'powershell.exe' -and $_.ProcessId -eq $pid -and $_.commandline -match $("-WindowStyle Hidden") })) { | |
[Console.Window]::ShowWindow($consolePtr,4) | Out-Null | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment