Windows – Set (Many) Programs’ Window Size/Position

autohotkeyautomationpowershellwindowwindows 7

I'm looking for a solution similar to this, but for Windows 7 (64-bit), and not just for the terminal. This is also definitely not a duplicate of this question.

The Problem

Some programs remember their last position/size (e.g. Firefox, Notepad++), while others are unfortunately stubborn (e.g. Git). The stubborn ones require me to spend an extra minute (so long, right?) moving them back to their desired positions/sizes before I can start working.

Use Case

I'm a programmer, and I have a very specific preference for my development environment. I have two monitors, and have my IDE (varies by the task), Git terminal, Windows Explorer window, Firefox, etc. open all at once, in a specific layout that helps me work more efficiently.

Environment-Based Auto-Setup

Ideally, I could open all of these programs, and press a hotkey combination to throw all of the windows into their desired positions with the correct sizes. Or even more ideally, have a set of settings (scripts, hotkey combinations, etc.) that I could run in certain scenarios to open a set of specific programs depending on the task (may be asking too much), and set that specific layout.

Example: a C# development script that opens Visual Studio and many other programs, then sets their window locations appropriately. Another for Node.js development.

Tools For The Job?

I only have some vague ideas of the capabilities of certain tools. Maybe Windows Power Shell would be appropriate? I wouldn't mind writing scripts for these tasks. Auto Hotkey also seems like it might work.


Does anyone have any experience with this kind functionality and have any recommendations as to how to go about something like this? The ability to run a script/hotkey to open a set of programs and set all sizes/positions automatically would be best, if possible.

Note: I tagged this as powershell and autohotkey just in case those tools very well apply to the task. If you feel this is tagged incorrectly, please feel free to remove/re-tag!

Best Answer

You could use the PowerShell UIAutomation module.

For example, to move Notepad to screen location (100, 100):

$w = Get-UIAWindow -ProcessName notepad
$w.Move(100, 100)
Related Question