WASP is a PowerShell snapin for Windows Automation tasks like selecting windows and controls and sending mouse and keyboard events. WASP has automation cmdlets like Select-Window, Select-Control, Send-Keys, Send-Click, Get-WindowPosition, Set-WindowPosition, Set-WindowActive, Remove-Window ... etc.
Its goal is to enable Windows GUI Automation scripting from inside PowerShell without resorting to specialized scripting tools.
Just to be clear, don't expect any "click to record" functionality ... but do expect to be able to automatically tile windows, send mouse clicks and keystrokes, and in general, automate those tasks that you would normally not be able to do from a console.
{{
notepad.exe explorer.exe
Select-Window | ft –auto
Select-Window notepad* | Set-WindowActive
Select-Window explorer | Select -First 1 | Remove-WIndow
notepad; notepad; notepad; notepad;
$i = 1;$t = 100; Select-Window notepad | ForEach { Set-WindowPosition -X 20 -Y (($i++)*$t) -Window $_ }
Select-Window notepad | Send-Keys "this is a test"
Select-Window notepad | Select -First 1 | Send-Keys "%{F4}%n"
Select-Window notepad | Select -First 1 | Remove-Window -Passthru | Select-ChildWindow | Send-Keys "n"
Select-Window notepad | Select -First 1 | kill
Select-Window notepad | Select -First 1 | Remove-Window -Passthru | Select-childwindow | select-control| select-control| select-control -title "Do&n't Save" | Send-Click
Select-Window notepad | Select -First 1 | Remove-Window -Passthru | Select-childwindow | select-control -title "Do&n't Save" -recurse | Send-Click }}
{{
Select-Window devenv | Select-ChildWindow | Send-Click 10 10 -Double }}
- Select-Window - Pick windows by process name or window caption (with wildcard support)
- Select-ChildWindow - Pick all owned windows of another window (e.g., dialogs, tool windows)
- Select-Control - Pick controls (children) of a specific window, by class and/or name and/or index (with wildcard support) -- NOTE: the "Window" can be specified as "-Window 0" to get all parentless windows, which includes windows, dialogs, tooltips, etc... With -Window 0 this returns a true superset of the Select-Window output.
- Send-Click - send mouse clicks (any button, with any modifier keys)
- Send-Keys - Windows.Forms.SendKeys lets you send keys ... try this: {{Select-Window notepad | Send-Keys "%(ea)Testing{Enter}{F5}"}} (and for extra fun, try it with multiple notepad windows open).
- Set-WindowActive - Simply activates the window
- Set-WindowPosition - Set any one of (or all of) top, left, width, height on a window ... or maximize/minimize/restore
- Get-WindowPosition - Get the position (kind-of redundant, actually, since the Window object has it's position as a property)
- Remove-Window - Closes the specified window