Подтвердить что ты не робот

Задайте положение окна приложения через командную строку

У меня есть приложение, которое начинается с 0x0 позиции моего рабочего стола. Я хочу открыть его в центре рабочего стола. Я не хочу открывать его и использовать команду перемещения, чтобы переместить его в центр, просто хочу, чтобы мое приложение сразу начиналось в центре.

Есть ли способ сделать это с помощью командной строки? Любой другой способ?

4b9b3361

Ответ 1

Для этого вам понадобится дополнительная утилита, например cmdow.exe. Посмотрите конкретно на переключатель /mov. Вы можете запустить свою программу из cmdow или запустить ее отдельно, а затем вызвать cmdow для перемещения/изменения размера по своему желанию.

Ответ 2

Обнаружено, что AutoHotKey очень хорошо подходит для задач позиционирования окон.

Вот пример script. Назовите его notepad.ahk, а затем запустите его из командной строки или дважды щелкните по нему.

Run, notepad.exe
WinWait, ahk_class Notepad
WinActivate
WinMove A,, 10, 10, A_ScreenWidth-20, A_ScreenHeight-20

Он запустит приложение (блокнот), а затем отрегулирует размер окна так, чтобы он был центрирован в окне с 10-пиксельной рамкой со всех сторон.

Ответ 3

Я только что нашел этот вопрос, когда пытался сделать то же самое.

После некоторых экспериментов я натолкнулся на ответ, который работает так, как этого хотел бы OQ, и прост, как черт, но не очень общего назначения.

Создайте ярлык на рабочем столе или в другом месте (вы можете использовать помощник create-shortcut из контекстного меню), установите его для запуска программы "cmd.exe" и запустите ее. Когда окно откроется, разместите его там, где вы хотите, чтобы оно было. Чтобы сохранить эту позицию, откройте меню свойств и нажмите "Сохранить".

Теперь, если вы хотите, вы также можете установить другие свойства, такие как цвета, и я настоятельно рекомендую изменить буфер на ширину 120-240 и высоту на 9999 и включить режим быстрого редактирования (почему это не значения по умолчанию!?!)

Теперь у вас есть ярлык, который будет работать. Сделайте один из них для каждого окна CMD, которое вы хотите открыть в другом месте.

Теперь для хитрости, команда windows CMD START может запускать ярлыки. Вы не можете программно изменить положение окон перед запуском, но, по крайней мере, оно появляется там, где вы хотите, и вы можете запустить его (и другие) из пакетного файла или другой программы.

Используя ярлык с cmd/c, вы можете создать один ярлык, который может запускать ВСЕ ваши ссылки одновременно, с помощью команды, которая выглядит следующим образом:

cmd /c "start cmd_link1 && start cmd_link2 && start cmd_link3"

Это откроет все ваши командные окна на ваши любимые позиции и индивидуально установит свойства, такие как цвет переднего плана, цвет фона, шрифт, режим администратора, режим быстрого редактирования и т.д.... одним щелчком мыши. Теперь переместите эту "ссылку" в папку автозагрузки, и вы получите автоматическое восстановление состояния без каких-либо внешних программ.

Это довольно простое решение. Это не общая цель, но я верю, что это решит проблему, которую пытаются решить большинство людей, читающих этот вопрос.

Я сделал это недавно, поэтому выложу свой cmd файл здесь:

cd /d C:\shortucts
for %%f in (*.lnk *.rdp *.url) do start %%f
exit

Позднее редактирование: я не упоминал, что если исходная команда cmd/c запускается с повышенными правами, то каждое из ваших окон может (если было выбрано повышение прав) начинаться с повышенными правами без индивидуальной повторной подсказки. Это было очень удобно, так как я запускаю 3 окна cmd и 3 других приложения каждый раз, когда я запускаю свой компьютер.

Ответ 4

Ответ Билла К. был самым элегантным, если вы просто хотите запустить окно при запуске или начать с ярлыка на рабочем столе.

Просто откройте окно, в котором вы хотите, щелкните правой кнопкой мыши и выберите свойства. выберите "Макет" снимите флажок "let system position window" и нажмите "ОК".

Теперь откроется окно, в котором вы хотите. Вы можете одновременно устанавливать цвета шрифта и окна на других вкладках. сладкий.

Ответ 5

Это, вероятно, должно быть комментарием в ответе cmdow.exe, но вот простой командный файл, который я написал, чтобы обеспечить достаточно сложный и простой контроль над всеми окнами, которые вы видите на панели задач.

Первый шаг - запустить cmdow /t, чтобы отобразить список этих окон. Посмотрите, какое имя изображения находится в столбце Image, затем в командной строке:

mycmdowscript.cmd imagename

Вот содержимое командного файла:

:: mycmdowscript.cmd

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

SET IMAGE=%1
SET ACTION=/%2
SET REST=1
SET PARAMS=

:: GET ANY ADDITIONAL PARAMS AND STORE THEM IN A VARIABLE

FOR %%I in (%*) DO (
   IF !REST! geq 3 (
      SET PARAMS=!PARAMS! %%I
   )
   SET /A REST+=1
)

FOR /F "USEBACKQ tokens=1,8" %%I IN (`CMDOW /t`) DO (
     IF %IMAGE%==%%J (

     :: you now have access to the handle in %%I
     cmdow %%I %ACTION% !PARAMS!

     )
)

ENDLOCAL
@echo on

EXIT /b

пример использования

:: will set notepad to 500 500

mycmdowscript.cmd notepad siz 500 500

Возможно, вы могли бы переписать это, чтобы разрешить несколько действий для одной команды, но я еще не пробовал.

Чтобы это сработало, cmdow.exe должен быть расположен на вашем пути. Помните, что когда вы загружаете это, ваша программа AV может орать на вас. Этот инструмент имеет (Я думаю) в прошлом использовался авторами вредоносных программ для управления окнами. Это не вредно само по себе.

Ответ 7

Благодаря FuzzyWuzzy установите следующий код ("Быстрый и грязный пример" для разрешения экрана 1920x1080 - без автоматического вычисления ширины и высоты или использования функции и т.д.) В AutoHotKey добиться следующего: enter image description here

v_cmd = c:\temp\1st_Monitor.ps1
Run, Powershell.exe -executionpolicy remotesigned -File %v_cmd%
SetTitleMatchMode 2
SetTitleMatchMode Fast
WinWait, PowerShell
Sleep, 1000
    ;A = Active window - [x,y,width,height]
WinMove A,, 0, 0,1920,500

v_cmd = c:\temp\2nd_Monitor.ps1
Run, Powershell.exe -executionpolicy remotesigned -File %v_cmd%
WinWait, PowerShell
Sleep, 1000
    ;A = Active window - [x,y,width,height]
WinMove A,, 0, 500,960,400

v_cmd = c:\temp\3rd_Monitor.ps1
Run, Powershell.exe -executionpolicy remotesigned -File %v_cmd%
WinWait, PowerShell
Sleep, 1000
    ;A = Active window - [x,y,width,height]
WinMove A,, 960, 500,960,400

НЕБОЛЬШОЕ РЕДАКТИРОВАНИЕ тот же код с автоматическим вычислением размера экрана X/Y [4 монитора], но можно использовать и для 3/2 мониторов.

Screen_X = %A_ScreenWidth%
Screen_Y = %A_ScreenHeight%

v_cmd = c:\temp\1st_Monitor.ps1
Run, Powershell.exe -executionpolicy remotesigned -File %v_cmd%
SetTitleMatchMode 2
SetTitleMatchMode Fast
WinWait, PowerShell
Sleep, 1000
    ;A = Active window - [x,y,width,height]
WinMove A,, 0, 0,Screen_X/2,Screen_Y/2

v_cmd = c:\temp\2nd_Monitor.ps1
Run, Powershell.exe -executionpolicy remotesigned -File %v_cmd%
WinWait, PowerShell
Sleep, 1000
    ;A = Active window - [x,y,width,height]
WinMove A,, Screen_X/2, 0,Screen_X/2,Screen_Y/2

v_cmd = c:\temp\3rd_Monitor.ps1
Run, Powershell.exe -executionpolicy remotesigned -File %v_cmd%
WinWait, PowerShell
Sleep, 1000
    ;A = Active window - [x,y,width,height]
WinMove A,, 0, Screen_Y/2,Screen_X/2,Screen_Y/2

v_cmd = c:\temp\4th_Monitor.ps1
Run, Powershell.exe -executionpolicy remotesigned -File %v_cmd%
WinWait, PowerShell
Sleep, 1000
    ;A = Active window - [x,y,width,height]
WinMove A,, Screen_X/2, Screen_Y/2,Screen_X/2,Screen_Y/2