Imagine you do this...

  1. Connect your external monitor.
  2. Start some apps, some on each monitor.
  3. Disconnect the external monitor.
    • All good because all the apps move the primary monitor.
  4. Re-connect the external monitor.
    • The apps stay on the primary monitor, but it'd be very nice if they moved back to the external monitor they were on before.

Using Windows 10. Are there any solutions or workarounds to this to moving the apps back to the external monitor automatically?

I use UltraMon (I believe it is Open Source) and in certain circumstances, it can do this, if configured correctly.

First get the program UltraMon installed. Then, when it is running, lets say right now you only have one monitor plugged in (doesn't matter the number), create a profile:

  • Right Click the icon in the systray
  • Left Click Display profiles
  • Left Click new Display Profile, Name it (for example, what I do is give it a number reflecting how many monitors you are using, like Profile 1).
  • Now you have one. Cool, you can create wallpaper for each monitor, screensavers, etc. Get all of your icons just the way you want.
  • Right Click the systray Icon.
  • Left Click Desktop Icons Left Save Positions

Now connect/disconnect other displays. Create a profile for this new setup. Maybe call it "Profile 7" for having 7 monitors plugged in. Now save the icon positions when they are the way you want them.

You can easily use this tool to switch back and forth between profiles. You can easily place desktop shortcuts to quick-switch between profiles.

Lastly, in the advanced options, you can tell UltraMon to do this all the time, automatically for you, but that may require a paid version (one time lifetime fee).

I bought UltraMon back in 2009 for $19.99 and it was totally worth it.

  • 3
    Can you elaborate on the "how", the circumstances in which it works, and how to configure it correctly? – fixer1234 Apr 29 at 8:11
  • Yes sir/mam. First get the program UltraMon installed. www.ultramon.com Then, when it is running lets say right now you only have 1 monitor plugged in (doesn't matter the number) create a profile: Right Click the icon in the systray Left Click Display profiles Left Click new Display Profile Name it (this is what I do) by how many monitors you are using, like Profile 1. Now you have one. Cool, you can create wallpaper for each monitor, screensaves, etc. Get all of your icons just the way you want. Right Click the systray Icon. Left Click Desktop Icons Left Save Positions – PyTis Aug 29 at 2:47
  • Continuing on, now connect/disconnect other displays. Create a profile for this new setup. Maybe call it "Profile 7" for having 7 monitors plugged in. Now save the icon positions when they are the way you want them. You can easily use this tool to switch back and forth between profiles. You can easily place desktop shortcuts to quick-switch between profiles. Lastly, in the advanced options, you can tell UltraMon to do this all the time, automatically for you, but that may be a paid (one time life time fee) option. I bought UltraMon back in 2009 for 19.99 and it was totally worth it. – PyTis Aug 29 at 2:55

There aren't any solutions to do this, you must use the windows key on the keyboard with the left right arrows, to move in between screens, or windows key+shift+left/right in order to move to portions of the screen.

Windows key + P also helps in multi monitor situations to aid with mirroring/extending etc.

But again, once you disconnect your screen, if those windows had any metadata on them, they are gone afterwards

  • Actually, there are multiple solutions. One or two which you mentioned. Changing resolution is another one. – Hennes Oct 1 '17 at 12:33

Some gpu's have support for this such as Nvidia control panel which allows you to apply settings for this and a lot of other features.

Or you could just set the multiple display settings to mirror the desktop (instead of extend) on all monitors if that works for you.

I have, in the past, used an Autohotkey tool called Windowpad for this. Apparently this has now been replaced with a new, enhanced version called WindowPadX. Scroll down to see the readme. Full documentation is here.

This was crucial to me on multiple monitors. I loved to be able to easily switch a window between the two.

You can set hotkeys for the following (from the readme):

Possible actions to be configured on hotkeys

Window actions

Multi-Monitor

WPXA_MoveWindowToMonitor: Move window between screens, preserving relative position and size.

WPXA_MinimizeWindowsOnMonitor: Minimize all windows on the given Screen

WPXA_GatherWindowsOnMonitor: "Gather" windows on a specific screen.

WPXA_FillVirtualScreen: Expand the window to fill the virtual screen (all monitors).

General

WPXA_MaximizeToggle: Maximize or restore the window.

WPXA_TopToggle: Toogles "AlwaysOnTop" for given window

WPXA_RollToggle: Toggles "Roll/Unroll" for given window WPXA_Move: move and resize window based on a "pad" concept.

WPXA_TileLast2Windows: Tile active and last window

Multi-Monitor Mouse actions

WPXA_MoveMouseToMonitor: Moves mouse to center of given monitor

WPXA_ClipCursorToCurrentMonitorToggle: Toogles clipping mouse to current monitor

WPXA_ClipCursorToMonitor: Clips (Restricts) mouse to given monitor

General Mouse actions

WPXA_MouseLocator: Easy find the mouse

You can find it and other tools among a "A curated list of awesome AutoHotkey libraries, library distributions, scripts, tools and resources" here

  • this list of features suggests it can move windows around, but can it restore their positions to particular state? what does "gather" and "roll/unroll based on a pad concept" mean ? – TT-- Oct 2 at 13:57

Windows programs - called app(lication) nowadays - can save the position of their window in a file or the registry. If one knows where this data is, it can be edited manually in the notepad or registry editor. (incorrect registry entries may cause Windows instability or errors)

The creation of an automated way should be easy for someone with a bit of coding skills and it can be started as needed (i.e. after the monitor is re-attached). This could be done by an action script, .bat file or a native app.

The applications in question will need to be closed previous to this though in order for the desired positions to become implemented.

Another possibility with "online" capability (no app restart needed) would be if Windows allows accessing a window of one process by another. An approach could be the SendMessage and WindowProc functions.

(I'm unsure at this point if this only applies to threads of the parent application or can be done by threads of other applications as well...and of course requires good knowledge in programming for Windows)

https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

Sends the specified message to a window or windows. [...] If the specified window was created by the calling thread, the window procedure is called immediately as a subroutine. If the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure.

WM_Move message https://docs.microsoft.com/en-us/windows/desktop/winmsg/wm-move

Sent after a window has been moved.

A window receives this message through its WindowProc function.

https://msdn.microsoft.com/en-us/library/ms633573%28v=VS.85%29.aspx?f=255&MSPPError=-2147217396

An application-defined function that processes messages sent to a window. [...]

If you shift+right click the icon on the taskbar, then press move, you can use the arrow keys to move the window and the enter key to set the position. I had the same issue a few years ago.

Another solution is to use DisplayFusion to snap the window to the closest monitor (the only one connected) with the "Move all windows to current monitor" hotkey.

  • 1
    why so complex? If you just want to move to another monitor then simply use windows+shift+left/right – phuclv Oct 1 '17 at 13:01

You can do this, if you're an old "keyboard guy" like me ;-] I figured this out ages ago, being that I've been multi-mon since the early 90's, it's been a very longtime issue, amongst slightly differing UIs.

The easiest way I've found for offscreen/border apps, is:

  • Simply select the app, via the taskbar or Alt-Tab
  • Hold the Alt key down, and press the spacebar (Alt-Spacebar)
  • You'll see a menu, on your main screen(s), one option of which will be "Move", with the M underlined.
  • As such, press the "M" key, while the menu is still on-sceen
  • At this point, don't point/click/etc, as you're now "re-positioning" the active window (the offscreen one).
  • You can drag the mouse around (NO BUTTON PUSHES FOR NOW), and you should see the app sort of come in/out of the main screens, enough for you to place it somewhere more convenient for use.
  • Alternatively, you can use the arrow-keys to move the app around, works just as well, but a bit slower, to figure out where the windows is and which way it's heading.
  • Once you have the Window in a "good place", where can actively size/move it, either click the main-mouse-button, or if using the keyboard method, hit the "enter" key.
  • The window/app should now be easy to move/adjust.
  • Repeat for all windows/apps that are off-screen.
  • 3
    (1) Your answer seems to be suggesting that the OP has no idea how to move windows, which is insulting and naïve.  The whole point of the question is to get the computer to remember which window was on which monitor and to get the computer to restore them automatically,  without the user needing to remember where they were and then move them back manually, one at a time.  (2) Aside from the Alt+Space keyboard shortcut, your answer is essentially the same as the first paragraph of hydraxx’s answer.  … (Cont’d) – Scott Oct 19 '17 at 20:34
  • (Cont’d) …  (3) Why do you believe that the “easiest” way to do it is to use the keyboard to get into “move mode” and then use the mouse to do the moving?  As hydraxx says, you can do it entirely with the keyboard.  Or you can do it entirely with the mouse, by clicking on the window header and dragging.  You have presented the most complex possible solution. – Scott Oct 19 '17 at 20:34
  • It's actually quite simple, the description is just a bit tricky. I don't get the "Move" menu item when I try the taskbar thing, either it's been deprecated, or something on my system is preventing viewing it. I agree, other than the alt-spc, my answer is essentially the same, but I've shown my method to dozens, and it's always been along the lines of "wow, that was easy, wonder why didn't try that". My answer does allow for a keybd-only solution, as noted. There are utilities for this too, but sometimes shell extensions can have unwanted effects... – PeteG Oct 19 '17 at 23:39
  • I agree though, we're more or less getting to the same place, using the same construct in the OS. – PeteG Oct 19 '17 at 23:44
  • You could also use DisplayFusion to do this. It's got a setting to "snap" the current task/window to the current (likely main) monitor. – PeteG Oct 22 '17 at 1:46

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.