In Windows 7, I know you can do Windows + Left to put a window in the left half of the screen. Is there a feature that will do top and bottom?
22 Answers
No. The only snap options available are:
- left half snap (Windows + left)
- right half snap (Windows + right)
- full screen height snap (Windows + shift + up)
- maximized snap (Windows + up)
- "un-snap" (Windows + down)
- snap to next monitor / display (Windows + shift + (left or right))
Edit: other awesome combinations you might like:
- minimize all (Windows + m)
- minimize all but active window (Windows + Home)
- Aero peek (view Desktop, all Windows become transparent) (Windows + space)
- 4,510
I use the following steps to accomplish this:
- Windows + D (to minimize all windows)
- then use my mouse to place the windows I want to stack in the general placement on each monitor (don't bother resizing them)
- then right click on the taskbar and select "Show windows stacked" from the context menu then restore any other windows that I want
Note: You must minimize any windows that you don't want stacked. This is what step 1 is intended to do.
I wrote a little AutoHotKey script to snap the windows top and bottom because I was frustrated about this too. You can download it from my website: http://www.pixelchef.net/how-snap-windows-horizontally-windows-7
; Move window up (Windows + Shift + UP ... NOTE must maximize window first)
+#Up::
WinGetPos,X,Y,W,H,A,,,
WinMaximize
WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,,
; if this is greater than 1, we're on the secondary (right) monitor. This
; means the center of the active window is a positive X coordinate
if ( X + W/2 > 0 ) {
SysGet, MonitorWorkArea, MonitorWorkArea, 1
WinMove,A,,X,0 , , (MonitorWorkAreaBottom/2)
}
else {
SysGet, MonitorWorkArea, MonitorWorkArea, 2
WinMove,A,,X,0 , , (MonitorWorkAreaBottom/2)
}
return
; Move window down (Windows + Shift + DOWN ... NOTE must maximize window first)
+#Down::
WinGetPos,X,Y,W,H,A,,,
WinMaximize
WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,,
; if this is greater than 1, we're on the secondary (right) monitor. This
; means the center of the active window is a positive X coordinate
if ( X + W/2 > 0 ) {
SysGet, MonitorWorkArea, MonitorWorkArea, 1
WinMove,A,,X,MonitorWorkAreaBottom/2 , , (MonitorWorkAreaBottom/2)
}
else {
SysGet, MonitorWorkArea, MonitorWorkArea, 2
WinMove,A,,X,MonitorWorkAreaBottom/2 , , (MonitorWorkAreaBottom/2)
}
return
- 3
- 2
- 1,171
WindowSpace provides this functionality. To do what you're asking for:
- Go to the "Moving and Resizing" tab in
Settings - For "Top edge:", choose "Move to the top side"
- For "Bottom edge:", choose "Move to the bottom side"
Screenshot:

- 1,342
- 11
- 14
I don't have a windows 7 machine in front of me currently, but ever since Windows 95 (or even before possibly), there has been the option to tile windows horizontally. Minimize everything but two windows you want to view top and bottom, right click the task bar, and select Tile Windows horizontally. It will size each window to take up half the vertical screen area. This is not useful to do to a single window, and as another answer stated, there is no keyboard shortcut for it, but I find it handy sometimes.
Correction: on Windows 7, this is called "Show windows stacked"
- 348
Similar to northben, I also wrote an AutoHotKey script, albeit a bit differently so I thought it deserved its own answer. This script should work with any number of monitors or monitor orientations.
The commands are bound to Windows + Ctrl + Up and Down instead of Shift so as not to interfere with the existing Windows + Shift + Up.
This works similar to full screen height snap (Windows + Shift + Up) in that the window retains its horizontal position and width. This can easily be changed to work similarly to left half or right half snap (Windows + Left or Right) by uncommenting the ; WinMaximize, A line. If you want to keep the default behavior, but sometimes use the half snap behavior, just maximize the window before snapping.
Works with Windows 7 64-bit and AutoHotKey v1.1.14.03.
;-------------------------------------------------------------------;
; Returns the maximum or minimum value for any number of inputs
; i.e. Max(5,4,7,10) will return 10
;-------------------------------------------------------------------;
Min(params*)
{
r := params[1]
for index, param in params
if (param < r)
r := param
return r
}
Max(params*)
{
r := params[1]
for index, param in params
if (param > r)
r := param
return r
}
;-------------------------------------------------------------------;
; WindowsKey+Ctrl+Up / WindowsKey+Ctrl+Down
; Resizes window to half the screen height and moves it to the top
; or bottom of whichever screen has the largest overlap.
; By default, the window retains its horizontal (x) position and
; width. To change this, uncomment the WinMaximize line.
;-------------------------------------------------------------------;
UpDownSnap(Direction)
{
; WinMaximize, A
WinGetPos, x, y, w, h, a, , ,
SysGet , Count, MonitorCount
refArea := 0
Loop, %count%
{
SysGet, m, MonitorWorkArea, %A_Index%
xo := Max(0, Min(x + w, mRight) - Max(x, mLeft))
yo := Max(0, Min(y + h, mBottom) - Max(y, mTop))
area := xo * yo
if (area > refArea)
{
monTop := mTop
monBottom := mBottom
refArea := area
}
}
; If the refArea is still equal to 0, the window does
; not overlap with any monitors. Wat?
if (refArea > 0)
{
if (direction = 1)
newY := monTop
Else
newY := (monBottom - monTop) / 2 + monTop
WinMove , a, , x, newY, w, (monBottom - monTop) / 2
}
}
^#Up::UpDownSnap(1)
^#Down::UpDownSnap(0)
- 2,098
The best program I've ever used that accomplishes exactly this + more is WinSplit Revolution: http://winsplit-revolution.com/
I highly recommend it, as it is extremely simple to use and it even works well with multiple monitors.
Demo video: http://winsplit-revolution.com/screenshots/videos-demos
This application is freeware and released under Creative Commons Attribution-Non Commercial-No Derivative Works 3.0.
EDIT:
It appears WinSplit is no longer available, the website has been taken over by Digital Creations AS, which has their own version of this type of software, and is no longer free
Fixed a bug in Jason Clement's solution. When the window snaps vertically, previously it would not also take up the width of the monitor. It would just stay at the current window width, but would snap to 1/2 monitor vertically. With this fix, it snaps to 50% vertical height up or down and 100% horizontal width of the monitor.
Also, for those who may not know AHK...
- Download AutoHotKey
- Create a text file in notepad. Paste the code into it. Save it with the correct extension for AutoHotKey, e.g. "VerticalSnap.ahk"
- Right click on the file from Explorer, choose "Compile script"
- The compile should create a "VerticalSnap.exe" file in that directory.
- Open run.exe, type in "shell:startup" and hit Enter.
- A new Explorer window should open up to the Startup folder.
- Copy/paste the .exe file into this Startup folder.
- On next bootup, this script should be running. You can use CRTL+WINDOWS+UPARROW or +DOWNARROW to snap to the top of bottom half of your monitor. Note that the window must not be maximized for this to work.
Hope that helps, and thanks Jason!
;-------------------------------------------------------------------;
; Returns the maximum or minimum value for any number of inputs
; i.e. Max(5,4,7,10) will return 10
;-------------------------------------------------------------------;
Min(params*)
{
r := params[1]
for index, param in params
if (param < r)
r := param
return r
}
Max(params*)
{
r := params[1]
for index, param in params
if (param > r)
r := param
return r
}
;-------------------------------------------------------------------;
; WindowsKey+Ctrl+Up / WindowsKey+Ctrl+Down
; Resizes window to half the screen height and moves it to the top
; or bottom of whichever screen has the largest overlap.
; By default, the window retains its horizontal (x) position and
; width. To change this, uncomment the WinMaximize line.
;-------------------------------------------------------------------;
UpDownSnap(Direction)
{
; WinMaximize, A
WinGetPos, x, y, w, h, a, , ,
SysGet , Count, MonitorCount
refArea := 0
Loop, %count%
{
SysGet, m, MonitorWorkArea, %A_Index%
xo := Max(0, Min(x + w, mRight) - Max(x, mLeft))
yo := Max(0, Min(y + h, mBottom) - Max(y, mTop))
area := xo * yo
if (area > refArea)
{
monTop := mTop
monBottom := mBottom
monLeft := mLeft
monRight := mRight
refArea := area
}
}
; If the refArea is still equal to 0, the window does
; not overlap with any monitors. Wat?
if (refArea > 0)
{
if (direction = 1)
newY := monTop
Else
newY := (monBottom - monTop) / 2 + monTop
WinMove , a, , monLeft, newY, (monRight - monLeft), (monBottom - monTop) / 2
}
}
^#Up::UpDownSnap(1)
^#Down::UpDownSnap(0)
- 160
place yours windows just about like you want --> right click on taskbar --> "show windows stacked" --> profit!
- 51
As Rain suggested here, PowerResizer works well. Not very customizable - you can't change keyboard shortcuts, but it's at least open source. As JoeB notes, you can press these while dragging a window: W to move up, and Z to move down. A is to move to the left, S to move to the right. Or just drag the window to the edge. Pressing 1,2,3, and 4 while dragging will do a quarter snap to a corner. I'm happy with it, try it out.
- 847
If you have an AMD graphics card, you can use "Hydravision."
(1) Open the Catalyst Control Center (2) Under "Desktop and Displays" click "More..." (3) Under "Hydravision" click "HydraGrid" (4) Check "Enable HydraGrid" (5) Click "Edit HydraGrid" and put grid lines where you'd like, e.g. half way up a portrait monitor (6) Apply
Now when you are working with windows, you can right click on the title bar and select "Attach to Grid," then drag it from place to place and it will snap to the grid.
I run 3x1 24" monitors in portrait mode with this setup and it's the quickest way I've found to snap windows to the top and bottom half of each monitor.
- 31
Check out AquaSnap. You can mouse drag as expected, use Ctrl+Mouse to resize two tiled windows at the same time, besides a host of other features.
You can also use a wide variety of hotkeys. This program overrides a few Windows defaults you are already used to using, besides changing Win+Up and Win+Down for dock to top/bottom.
WindowSpace works, but isn't nearly as nice, and can hang up for a while when you hit apply. Comparably, the free/trial version of Aquasnap Pro is a very smooth experience.
- 847
Use the free PowerToys by Microsoft. It includes a feature called FancyZones which allows you to divide your monitor into custom areas and use Shift-drag to drag windows into those areas.
- 133
There are lots of options provided by Windows, including STACKING, SIDE BY SIDE, and CASCADING. These are done by right-clicking an empty area on the task-bar (usually at the bottom of the screen) and selecting. Yeah, it's not a keyboard short-cut, but it's fairly close.
Don't trust me, get it straight from the horse's mouth, Microsoft here.
Also the website has a lot of other nice tidbits--many that you know, a few might be new. Hope this helps.
- 205
- 1
- 2
- 11
There is a third-party-free way to achieve this functionality, but AFAIK:
- It requires some mouse use
- It only works for two windows.
The recipe is:
- Snap the windows side-by-side the usual way.
- Press
Win+Downto make one of the windows take a quarter of the screen - Select the other window and press
Win+Upto make the other window take the opposite quarter of the screen - Use the mouse to grab the edge of the window and resize it to the edge of the screen, thus maximizing the width of each window without changing their heights.
- 575
- 5
- 16
I needed to repeatedly split the two Browser Windows top and bottom in Windows 10 with a multi-monitor setup with a lot of other windows already open. Could do it manually but wanted a better solution.
I found the Chrome Extension "Tab Resize - Split Screen Layouts" extension made this super easy for me.
Just open a new Chrome Window, click the Tab Resize extension icon, pick 2x1 option. Nice and easy now.
- 101
If you use a Dell monitor, you can install the Dell Display Manager, which has options to divide the display into a grid.
Then you can drag the window into a cell while holding down the Shift key.
- 4,407
Windowpad is super lightweight and deals with this quite nicely.
It's a standalone exe, you run it after booting, then windows key + numpad maximises to the various quarters and halves. Or if you don't have a numpad then capslock + the WASD area.
https://autohotkey.com/board/topic/19990-windowpad-window-moving-tool/
- 1,230
This is brand-specific, and means using the mouse instead of the keyboard, but if you use Dell monitors you can use Dell Display Manager (free).
It lets you split up each monitor however you want (2x1, 2x2, 4x2, whatever), then you snap windows into place in any segment. I've been using it for a few years now, and it's really good.
- 312
Base on top of the @northben 's answer above using Autokey application. I updated the code to make it work on multiple-screen, and able to snap correctly to top/bottom half of the screen.
You can uncomment the code i.e. MsgBox to inspect values of screen.
Notice that screen detection logic just bases on left-top position of the current active window which is just enough, and suffices, not necessary to involve its window width or height at this case. But if you need that precise use case, feel free to extend it further.
The code uses Autokey API 1.1 (same as original answer). It works with Autokey V. 2 binary, it has backward compatibility.
Upstream gist at https://gist.github.com/haxpor/2932d5e898e40407f142e95900c8cb2e
; ----------
; Move window up (Windows + Shift + UP)
+#Up::
target_monitor := 2
SysGet, MonitorCount, MonitorCount
; get current active window
WinGetPos, curr_win_x, curr_win_y, curr_win_width, curr_win_height, A
; loop to check which screen the current active window shall be within
Loop, %MonitorCount%
{
SysGet, Monitor, Monitor, %A_Index%
; care only the top-left position of the window
if (curr_win_x >= MonitorLeft && curr_win_x < MonitorRight && curr_win_y >= MonitorTop && curr_win_y < MonitorBottom)
{
target_monitor := A_Index
;MsgBox, Detect active window is at monitor %A_Index%
;MsgBox, %MonitorLeft%, %MonitorRight%, %MonitorTop%, %MonitorBottom%
break
}
}
; bound check the target_monitor
if (target_monitor < 1 && target_monitor > MonitorCount)
{
MsgBox, %target_monitor% is out of bound of %MonitorCount%
return
}
SysGet, Monitor, Monitor, %target_monitor%
WinMove, A,, MonitorLeft, MonitorTop, (MonitorRight-MonitorLeft), (MonitorBottom-MonitorTop)/2.0
return
; ----------
; Move window down (Windows + Shift + DOWN)
+#Down::
target_monitor := 2
SysGet, MonitorCount, MonitorCount
; get current active window
WinGetPos, curr_win_x, curr_win_y, curr_win_width, curr_win_height, A
; loop to check which screen the current active window shall be within
Loop, %MonitorCount%
{
SysGet, Monitor, Monitor, %A_Index%
; care only the top-left position of the window
if (curr_win_x >= MonitorLeft && curr_win_x < MonitorRight && curr_win_y >= MonitorTop && curr_win_y < MonitorBottom)
{
target_monitor := A_Index
;MsgBox, Detect active window is at monitor %A_Index%
;MsgBox, %MonitorLeft%, %MonitorRight%, %MonitorTop%, %MonitorBottom%
break
}
}
; bound check the target_monitor
if (target_monitor < 1 && target_monitor > MonitorCount)
{
MsgBox, %target_monitor% is out of bound of %MonitorCount%
return
}
SysGet, Monitor, Monitor, %target_monitor%
WinMove, A,, MonitorLeft, (MonitorBottom-MonitorTop)/2.0 + MonitorTop, (MonitorRight-MonitorLeft), (MonitorBottom-MonitorTop)/2.0
return
- 103
An option that I've found useful is to subdivide your monitors into virtual halfs using DisplayFusion. You set this up by doing the following:
- Right-click the DisplayFusion icon located on your notification area and go to
Monitor Configuration. - Select the monitor that you want to configure.
- Add a
vertical splitto the monitor. (You could play around with this and split your monitors up even more.)
With this enabled, you should be able to use your Windows + Arrow keys to navigate your window to maximize into that new vertically split area of your monitor. I'm about to run my two 1920x1200 monitors in portrait mode once my 30" comes in and vertically snapping windows will be a necessity.
- 1

