- MoveWindow function (winuser.h)
- Syntax
- Parameters
- Return value
- Remarks
- Move a Window with the Keyboard in Windows 7/8/10
- Method 1 – Incremental Move
- Method 2 – Windows Snap
- Method 3 – Multi-Monitor Setups
- How do I move my current active window from one monitor to another using a keyboard shortcut?
- 9 Answers 9
- Windows move active window
MoveWindow function (winuser.h)
Changes the position and dimensions of the specified window. For a top-level window, the position and dimensions are relative to the upper-left corner of the screen. For a child window, they are relative to the upper-left corner of the parent window’s client area.
Syntax
Parameters
A handle to the window.
The new position of the left side of the window.
The new position of the top of the window.
The new width of the window.
The new height of the window.
Indicates whether the window is to be repainted. If this parameter is TRUE, the window receives a message. If the parameter is FALSE, no repainting of any kind occurs. This applies to the client area, the nonclient area (including the title bar and scroll bars), and any part of the parent window uncovered as a result of moving a child window.
Return value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Remarks
If the bRepaint parameter is TRUE, the system sends the WM_PAINT message to the window procedure immediately after moving the window (that is, the MoveWindow function calls the UpdateWindow function). If bRepaint is FALSE, the application must explicitly invalidate or redraw any parts of the window and parent window that need redrawing.
Move a Window with the Keyboard in Windows 7/8/10
Comes in handy once in a blue moon
So for those of you who do not like to use a mouse, it would be pretty cool if you could move a window using just the keyboard in Windows 7 right? Well, there are a couple of ways to do this and even though you may not need to do it very often, it does come in handy on the rare occasion!
In this article, I’ll tell you how to move a window in small increments to the exact position you want, how to snap a window to the left or right and how to move a window between monitors on a multi-monitor setup, all by just using the keyboard!
Method 1 – Incremental Move
For exact positioning, you first need to click on the window. Now this is obviously going to only work for windows that are not fully maximized. If it’s fully maximized, there is really nowhere to move the window.
Step 1: Either click on the window or if you want to use the keyboard, press ALT+TAB and make the window you want to move active.
Step 2: Now go ahead and press ALT+SPACEBAR and you’ll see a small menu appear in the window.
Step 3: Now press M, which will basically choose the Move option in the menu.
Step 4: Now use the arrow keys on your keyboard to move the window to the new position that you desire.
Step 5: Press the Enter key to get out of the move mode. Also, if you want to have the window go back to the original position before you started the move, press the Esc key instead.
Method 2 – Windows Snap
Windows has a nifty feature that lets you snap windows to the left-hand or right-hand side of the screen. If you drag a window to the right or left, it will automatically resize and snap to the side.
To do this using the keyboard, press the Windows Key + the right or left arrow. Make sure to hold down the Windows key while pressing the left and right arrow keys. It’s actually pretty neat and much faster than dragging the window around the screen.
Method 3 – Multi-Monitor Setups
Lastly, for moving between multiple monitors, all you have to do is add SHIFT to the above key combo, so it would simply be Windows Key + Shift + right or left arrow.
For the power users who really want to control their windows, moving may not be enough. So here’s a few other shortcuts that could come in handy if you are left with nothing but a keyboard and Windows:
End – Will display the bottom of the active window (in case you need to scroll using the keyboard)
Home – Will display the top of the active window
F11 – Will either maximize or minimize the active window
Ctrl + Tab – If you have a window with tabs, then this will move you forward through the tabs
Ctrl + Shift + Tab – Will move you back through the tabs
Windows Key + Shift + Up Arrow – This will stretch a window to the top and bottom of the screen.
Founder of Help Desk Geek and managing editor. He began blogging in 2007 and quit his job in 2010 to blog full-time. He has over 15 years of industry experience in IT and holds several technical certifications. Read Aseem’s Full Bio
How do I move my current active window from one monitor to another using a keyboard shortcut?
I use a multiple-monitor setup on Windows XP. I would like to be able to move the active window from one monitor to the other with a keyboard shortcut.
I know that I can use Alt+Space, M , or drag the window with the mouse. But is it possible to do this with a single keyboard shortcut?
9 Answers 9
In Windows 7 you can instantly move the active window from one monitor screen to another with WIN + Shift + Right / Left .
You can try Multimon Taskbar. They have a free version. You can use Ctrl-Alt-left/right to move the window between the monitors.
You might take a look at Ultramon. It provides that feature and many more.
From the linked page:
UltraMon is a utility for multi-monitor systems, designed to increase productivity and unlock the full potential of multiple monitors.
- efficiently move windows and maximize windows across the desktop
- manage more applications with the Smart Taskbar
- control application positioning with UltraMon Shortcuts
- multi-monitor support for desktop wallpapers and screen savers
- mirror your main monitor to secondary monitors for a presentation
Windows move active window
Работа с окнами
GetForegroundWindow
Возвращает window-handle активного окна, который можно использовать в большинстве «оконных» команд (см. также win_pattern, WIN-HWND, WIN-CHILD-HWND).
Пример:
SendMessageA ( u u u u — u )
Операционная система Windows позволяет посылать любому окну специальные управляющие сообщения (Windows Messages). Разумеется, разные окна способны принимать разные сообщения. Сверьтесь с API интересующей вас программы, чтобы узнать, какие сообщения можно посылать ее окнам. Для «отправки» Windows Messages используется специальная win32-функция SendMessage. Вот ее описание:
SendMessageA — это постфиксный вариант функции SendMessage, который можно использовать в nnCron. Это означает, что, выяснив Window Handle нужного окна, вы можете посылать ему Windows Messages прямо из своих задач. Не забывайте, что SendMessageA это постфиксное слово: аргументы передаются ему как бы «наоборот»:
Если вы не собираетесь использовать значение, которое возвращает SendMessageA, то его надо явным образом удалить со стека.
Примеры:
«Нажимает» на указанную кнопку в указанном окне.
Перед словом WIN-CLICK: можно использовать модификатор ALL.
Посылает WM_CLOSE указанному окну, т. е. эмулирует однократное нажатие левой кнопкой мыши на «крестике» в правом верхнем углу окна.
Перед словом WIN-CLOSE: можно использовать модификатор ALL.
Прячет (скрывает) указанное окно. Программа при этом продолжает работать, просто ее окно больше не отображается на экране. Для того, чтобы снова вывести окно на экран, воспользуйтесь словом WIN-SHOW:.
Перед словом WIN-HIDE: можно использовать модификатор ALL.
Восстанавливает на экране окна, скрытые с помощью слова WIN-HIDE:, а также окна программ, запущенных с опцией SWHide.
Перед словом WIN-SHOW: можно использовать модификатор ALL.
Завершает процесс, породивший указанное окно.
Перед словом WIN-TERMINATE: можно использовать модификатор ALL.
Активизирует указанное окно.
Следует указать, что во время работы nnCron, заголовок текущего активного окна всегда находится в переменной %ACTIVE-WINDOW%.
Существует также постфиксный вариант этого слова:
Возвращает флаг TRUE (-1), если указанное окно активно
Возвращает флаг TRUE (-1), если указанное окно существует.
Существует также постфиксный вариант этого слова:
Сворачивает (минимизирует)/разворачивает (максимизирует)/восстанавливает указанное окно.
Перед словами WIN-MINIMIZE:, WIN-MAXIMIZE: и WIN-RESTORE: можно использовать модификатор ALL.
Существуют также постфиксные варианты этих слов:
Постфиксное слово, которое принимает window handle нужного окна в качеcтве аргумента и возвращает два значения: координаты левого верхнего угла этого окна.
Пример:
WIN-RECT ( h — r b y x )
Постфиксное слово, которое принимает window handle нужного окна в качеcтве аргумента и возвращает четыре значения: координаты левого верхнего и правого нижнего углов этого окна.
Пример:
Постфиксное слово, которое изменяет размеры активного окна. Принимает ширину и высоту окна (в пикселах) в качестве аргументов.
Примеры:
Помещает указанное окно поверх всех окон. После применения WIN-TOPMOST:, заданное окно останется поверх остальных, даже после потери фокуса. Чтобы вернуть окну «обычные свойства», просто закройте окно и откройте снова или воспользуйтесь словом WIN-NOTOPMOST:.
Отменяет действие слова WIN-TOPMOST:. Совместное применение слов WIN-TOPMOST: и WIN-NOTOPMOST: позволяет удерживать указанное окно поверх остальных окон на протяжении нужного времени, после чего вернуть этому окну «обычные» свойства.
Активизирует указанное окно и посылает ему последовательность клавиатурных кодов.
Иногда, при описании клавиатурных сокращений, возникает необходимость указать одновременно нажатые клавиши (например, нажата и удерживается клавиша CTRL и при этом нажимаются клавиши и ALT и G). В этом случае вы сначала указываете первую нажатую и удерживаемую клавишу, а все остальные окружаете круглыми скобками.
Паузу между «нажатиями» клавиш и между конструкциями WIN-SEND-KEYS: можно задать с помощью слова SEND-KEYS-DELAY:.
WIN-SET-TITLE: «win_pattern» «new_window_title»
Изменяет заголовок указанного окна. Одна из распространенных сфер применения этого слова — создание уникальных заголовков для нескольких одновременно запущенных экземпляров одной и той же программы.
Пример:
Существует также постфиксный вариант этого слова:
Перемещает активное окно в новую позицию с абсолютными координатами x и y (в пикселах).
Узнать нужные координаты можно с помощью утилиты WinSpy.
Перемещает активное окно на указанное количество пикселов относительно текущей позиции.
В качестве аргументов слова WIN-MOVER: можно указывать как положительные, так и отрицательные значения:
- Положительное значение аргумента x перемещает окно на указанное количество пикселов вправо.
- Отрицательное значение аргумента x перемещает окно на указанное количество пикселов влево.
- Положительное значение аргумента y перемещает окно на указанное количество пикселов вниз.
- Отрицательное значение аргумента y перемещает окно на указанное количество пикселов вверх
Узнать нужные координаты можно с помощью утилиты WinSpy.
Задает время ожидания готовности активного окна.
Например, если приложение после старта выполняет какую-нибудь длительную операцию и окно приложения все это время не реагирует на действия юзера, то можно задать время (в миллисекундах) в течение котрого nnCron будет ожидать готовности активного окна.
Если активное окно освободится раньше указанного срока, то nnCron тут же запустит на выполнение следующую строку задачи. В обратном случае nnCron запустит следующую строку только после окончания всего срока ожидания.
Специальный цикл, который позволяет обрабатывать не только отдельные окна, но и целые группы окон, подпавших под указанную маску: для каждого подходящего окна будут выполнены команды, заданные в теле цикла FOR-WINDOWS:.
Работает это так: если, например, под определенную маску подпали пять окон, то цикл FOR-WINDOWS: автоматически будет запущен пять раз, причем при каждом запуске будет обновлено значение переменной %FOUND-WINDOW%, которая содержит заголовок найденного окна. (Вместо переменной %FOUND-WINDOW% можно использовать переменную %WIN-TITLE% — это одно и то же). При каждом цикле обновляется и значение переменной WIN-HWND, которая содержит window handle текущего окна.
Значит, при каждом цикле вы получаете доступ к заголовку очередного окна, подпадающего под указанную маску. Вам остается только выполнить над этим окном нужное действие (закрыть, переместить, минимизировать и т. д.) или же предпринять новую проверку, чтобы решить, как именно поступить с конкретным окном.
Возможность произвести проверку дополнительных условий перед выполнением действия с каждым окном — это основное отличие FOR-WINDOWS: от модификатора ALL.
Специальный цикл, который позволяет обрабатывать группы дочерних окон, чей заголовок подпадает под указанную маску. Перед использованием FOR-CHILD-WINDOWS:, переменная WIN-HWND должна содержать window handle того окна, чьи дочерние окна мы будем обрабатывать.
После использования большинства слов WIN*, WIN-EXIST: и цикла FOR-WINDOWS: эта переменная устанавливается должным образом.
Внутри цикла FOR-CHILD-WINDOWS: устанавливается своя переменная, содержащая window handle текущего дочернего окна: WIN-CHILD-HWND.
Почти перед всеми WIN-* командами можно применять модификатор ALL.
Этот модификатор предписывает соответствующей команде выполнится для всех окон, заголовки которых совпадают с заданной маской.
Примечание: после большинства «оконных» команд (а также WIN-EXIST:) USER-VALUE переменная WIN-HWND содержит window handle соответствующего окна, а переменная %FOUND-WINDOW% — заголовок этого окна. (%WIN-TITLE% является синонимом %FOUND-WINDOW%).
win_pattern — это маски заголовка окна или класса окна. Задавая маску заголовка окна можно применять символы * и ? или регулярные выражения, заключив их в прямые слеши: / /. Также в win_pattern можно использовать window handle нужного окна (и в десятичном, и в шестнадцатеричном представлении). Класс, точный заголовок и window handle нужного окна можно узнать с помощью утилиты WinSpy.