Как пакетный файл запускает программу и задает положение и размер windows?

У меня есть командный файл, который настраивает среду рабочего стола для меня, когда я пишу код. Файл имеет имя: SetEnv.cmd и он открывает еще 3 windows:

  1. Экземпляр проводника Windows, установленный в каталог развертывания сервера приложений.
  2. Второй экземпляр Windows Explorer, который установлен в каталог, в котором написан мой файл развертывания.
  3. Консольное окно для запуска моего сервера приложений.

Вот содержимое SetEnv.cmd :

 Explorer /n,c:\develop\jboss-4.2.3.GA\server\default\deploy Explorer /n,c:\develop\Project\Mapping\deploy cmd /c SetupEnvCmd.cmd 

И вот содержимое SetupEnvCmd.cmd :

 cd C:\develop\jboss-4.2.3.GA\bin run 

Каждый раз, когда я запускаю это, мне приходится тратить время на изменение и изменение размеров окон. Я не хочу запускать windows с минимальными значениями, потому что я много раз взаимодействую с каждым окном при написании и тестировании кода. Есть ли способ контролировать положение и / или размер окон, открытых из скрипта?

Попробуйте запустить ваши программы из сценария VBS (сценарий Windows Script) через пакетный файл. Если ваш VBS выглядит так:

 'FILENAME: SetEnv.vbs Set Shell = WScript.CreateObject("WScript.Shell") Shell.Run "Explorer /n,c:\develop\jboss-4.2.3.GA\server\default\deploy", 4, False Shell.Run "Explorer /n,c:\develop\Project\Mapping\deploy", 4, False 

4 означает запуск windows в его последнем размере / позиции. False означает, что он не будет ждать возврата до выполнения следующей строки вашего скрипта. К сожалению, это не дает вам полного контроля над вашим точным размером windows / позиционированием, но он должен помнить последний размер / позиционирование.

Подробнее здесь: http://www.devguru.com/Technologies/wsh/quickref/wshshell_Run.html

Таким образом, ваш новый SetEnv.cmd может быть:

 @echo off REM note there's a difference between cscript and wscript REM wscript is usually the default launcher cscript SetEnv.vbs cd C:\develop\jboss-4.2.3.GA\bin run 

Ниже приведен альтернативный способ использования nircmd из http://www.nirsoft.net/utils/nircmd.html.
Примеры:

nircmd win move ititle “cmd.exe” 5 5 10 10
nircmd win setize ititle “cmd.exe” 30 30 100 200
nircmd cmdwait 1000 win setize ititle “cmd.exe” 30 30 1000 600

Вот содержимое SetEnv.cmd:

     Проводник /n.c:\develop\jboss-4.2.3.GA\server\default\deploy
     nircmd wait 1000 win setize ititle "something" x, y, width, height
     Explorer / n, c: \ develop \ Project \ Mapping \ deploy
     nircmd wait 1000 win setize ititle "something" x, y, width, height

Где x, y расположение и ширина верхнего левого угла, высота – размер windows «что-то» – это заголовок windows, как правило, имя папки, например. «c: \ develop \ jboss-4.2.3.GA \ server \ default \ deploy» Возможно, потребуется «подождать», чтобы дать время для инициализации windows приложения. Таким образом, вы увеличили бы время, если у вас есть антивирусные сканеры, которые задерживаются. Не так много проблем с explorer.exe или cmd.exe, но что-то вроде приложений Firefox или java может варьироваться от нескольких секунд до нескольких десятков секунд в зависимости от скорости вашего оборудования и настройки ОС. Вы также можете настроить окно cmd.exe или приложение «запустить», добавив строки в «SetupEnvCmd.cmd, предполагая, что« запустить »является асинхронным приложением win32, иначе добавить команду« начать ».

Эта проблема полностью решена с помощью нескольких вспомогательных программ и пакетного файла.
У меня есть два решения; один для компьютера с одним монитором, а другой для компьютера с несколькими мониторами.

РЕШЕНИЕ 1: ДЛЯ КОМПЬЮТЕРА ОДИНОЧНОГО МОНИТОРА

Этот демо-пакетный файл будет открывать два windows обозревателя бок о бок и центрироваться на экране на основном мониторе.
Прочтите описание в пакетном файле.

Используемые инструменты:
1. MonitorInfoView от Нира Софера (41 КБ) ……….. homepage
2. NirCmd Нир Софер (43 КБ) ………………………. homepage
3. Пакетный файл (6 КБ) ………………………………….. …Смотри ниже

Соберите все три файла в каталог.
Это пакетный файл, готовый к запуску в любой системе Windows (запустите его для мгновенной демонстрации) :

 @echo off REM ----- GIVE THIS CONSOLE WINDOW TITLE A UNIQUE STRING ID title OPEN-2-EXPLORER-WINDOWS-SIDE-BY-SIDE-AND-CENTERED-ON-SCREEN-AT-THE-PRIMARY-MONITOR___20131209084355 pushd %~dp0 REM ----- HIDE THIS CONSOLE WINDOW (HOOKS THE WINDOW TITLE) nircmd.exe win hide ititle "OPEN-2-EXPLORER-WINDOWS-SIDE-BY-SIDE-AND-CENTERED-ON-SCREEN-AT-THE-PRIMARY-MONITOR___20131209084355" REM ********************** DESCRIPTION ************************************ REM ** This script opens one or more windows with specified screen properties REM ** at the primary monitor (containing the taskbar). The "X/Y position" and REM ** "W/H size" of the windows are auto-set by this script and the monitor REM ** resolution is auto-calculated to suit. REM ** 'MonitorInfoView.exe' is the helper tool used to capture the resolution REM ** info of the monitor. REM ** 'nircmd.exe' is the tool performing all the display trickery. REM ** REM ** To tweak this script, go to the code section named: REM ** >>>>> USER INPUT/PREFERENCES ARE ALL SET HERE <<<<< REM *********************************************************************** REM ----- CLEAR ANY PREVIOUS JOB OUTPUTS IF THEY EXIST if exist ~TMP.TXT type NUL > ~TMP.TXT REM ----- OUTPUT THE PRIMARY MONITOR INFORMATION TO A TEXT FILE MonitorInfoView.exe /hideinactivemonitors 1 /stext ~TMP.TXT REM ----- ISOLATE THE RESOLUTION LINE, REMOVING ALL THE OTHER LINES IN THE TEXT FILE for /f "delims=" %%A in ('type "~TMP.TXT" ^|find.exe /i "Maximum Resolution"') do echo %%A>~TMP.TXT REM ----- GET THE RESOLUTION NUMBERS, AND SET THEM AS VARIABLES for /f "tokens=3,4 delims=:X " %%A in ('type "~TMP.TXT"') do set _SCREENW_=%%A& set _SCREENH_=%%B REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REM >>>>>>>>>> USER INPUT/PREFERENCES ARE ALL SET HERE [BEGIN] <<<<<<<<<<<< REM ----- LEFT WINDOW PROPERTIES set _WINLEFT_=%SYSTEMDRIVE% set /a _WINLEFTW_=(%_SCREENW_% / 3) + 50 set /a _WINLEFTH_=(%_SCREENH_% / 2) + 200 set /a _WINLEFTX_=(%_SCREENW_% - %_WINLEFTW_%) / 5 set /a _WINLEFTY_=(%_SCREENH_% - %_WINLEFTH_%) / 2 REM ----- RIGHT WINDOW PROPERTIES set _WINRIGHT_=%USERPROFILE% set /a _WINRIGHTW_=(%_SCREENW_% / 3) + 50 set /a _WINRIGHTH_=(%_SCREENH_% / 2) + 200 set /a _WINRIGHTX_=(%_WINLEFTX_%) + (%_WINLEFTW_%) set /a _WINRIGHTY_=(%_SCREENH_% - %_WINRIGHTH_%) / 2 REM ----- ADJUST THE WAIT TIME (MILLISECONDS) BETWEEN EACH WINDOW LAUNCH. REM ----- IF TOO QUICK, THE FOLLOWING WINDOW WILL NOT SET IN THE CORRECT SCREEN POSITION. REM ----- | FOR FAST SYSTEM: TRY 200 | NORMAL SYSTEM: TRY 400-600 | BLOATED SYSTEM: TRY 800-1200+ set _WAITTIME_=400 REM ----- ON WINDOWS NT5 (XP, 2000), RUNNING EXPLORER WITH THE 'N' SWITCH WOULD RELIABLY GIVE REM ----- YOU 1-PANE VIEW (HIDDEN LEFT NAV PANE). ALSO, SHOWING/HIDING OF THE LEFT NAV PANE WAS REM ----- INSTANTLY TOGGLED BY AN ICON ON THE EXPLORER GUI TOOLBAR. REM ----- ON WINDOWS NT6 (VISTA, 7), EXPLORER WILL NOT OBEY YOUR COMMANDS AT ALL TIMES AND IT REM ----- IS A "PITA" TO CONTROL THE GRAPHIC USER INTERFACE. REM ----- THIS INPUT SECTION IS A WORKAROUND TO FORCE AN INSTANCE OF NT6 EXPLORER TO BE REM ----- TOGGLED TO A SPECIFIED VIEW. REM ----- | REM ----- | INSERT ONE OF THESE VALUES INTO THE VARIABLE _EXPLORER_VIEW_MYPREF_ REM ----- | | FOR EXPLORER 2-PANE VIEW (SHOW LEFT NAVPANE): 150100000100000000000000E5010000 REM ----- | | FOR EXPLORER 1-PANE VIEW (HIDE LEFT NAVPANE): 1501000000000000000000007B020000 set _EXPLORER_VIEW_MYPREF_=1501000000000000000000007B020000 REM >>>>>>>>>> USER INPUT/PREFERENCES ARE ALL SET HERE [END] <<<<<<<<<<<<<< REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REM ----- RUN THE TASK . . . REM ----- REGKEY 'HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Modules' DOES NOT EXIST IN NT5 OR EARLIER REM ----- BUT TO ELIMINATE DOUBT WE WILL PERFORM A CONDITIONAL VERSION CHECK for /f "tokens=2 delims=[]" %%A in ('ver') do set _THIS_OS_VERSTRING_=%%A set _THIS_OS_VERSTRING_=%_THIS_OS_VERSTRING_:Version =% for /f "tokens=1,2,3* delims=." %%A in ("%_THIS_OS_VERSTRING_%") do set _THIS_OS_MAJORVERSION_=%%A if %_THIS_OS_MAJORVERSION_% leq 5 goto SKIP1 set _EXPLORER_VIEW_REGKEY_=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Modules\GlobalSettings\Sizer set _EXPLORER_VIEW_REGVAL_=PageSpaceControlSizer if exist ~TMP.TXT type NUL > ~TMP.TXT reg.exe query %_EXPLORER_VIEW_REGKEY_% > ~TMP.TXT if %ERRORLEVEL% equ 1 goto SKIP1 for /f "delims=" %%A in ('type "~TMP.TXT" ^|find.exe /i "%_EXPLORER_VIEW_REGVAL_%"') do echo %%A>~TMP.TXT for /f "tokens=1-3 delims= " %%A in ('type "~TMP.TXT"') do set _EXPLORER_VIEW_SYSTEMPREF_=%%C reg.exe add %_EXPLORER_VIEW_REGKEY_% /v %_EXPLORER_VIEW_REGVAL_% /t REG_BINARY /d %_EXPLORER_VIEW_MYPREF_% /f 2>nul >nul nircmd.exe wait %_WAITTIME_% :SKIP1 nircmd.exe exec show "explorer.exe" /n,%_WINLEFT_% nircmd.exe wait %_WAITTIME_% nircmd.exe win setsize foreground %_WINLEFTX_% %_WINLEFTY_% %_WINLEFTW_% %_WINLEFTH_% nircmd.exe wait %_WAITTIME_% nircmd.exe exec show "explorer.exe" /n,%_WINRIGHT_% nircmd.exe wait %_WAITTIME_% nircmd.exe win setsize foreground %_WINRIGHTX_% %_WINRIGHTY_% %_WINRIGHTW_% %_WINRIGHTH_% REM ----- RESET SYSTEM PREF, CLEAR MEMORY, CLEANUP, QUIT . . . find.exe /i /c "%_EXPLORER_VIEW_REGVAL_%" ~TMP.TXT if %ERRORLEVEL% equ 1 goto SKIP2 nircmd.exe wait %_WAITTIME_% nircmd.exe wait %_WAITTIME_% reg.exe add %_EXPLORER_VIEW_REGKEY_% /v %_EXPLORER_VIEW_REGVAL_% /t REG_BINARY /d %_EXPLORER_VIEW_SYSTEMPREF_% /f 2>nul >nul :SKIP2 set _SCREENW_= set _SCREENH_= set _WINLEFTX_= set _WINLEFTY_= set _WINLEFTW_= set _WINLEFTH_= set _WINRIGHTX_= set _WINRIGHTY_= set _WINRIGHTW_= set _WINRIGHTH_= set _WAITTIME_= set _THIS_OS_VERSTRING_= set _THIS_OS_MAJORVERSION_= set _EXPLORER_VIEW_REGKEY_= set _EXPLORER_VIEW_REGVAL_= set _EXPLORER_VIEW_MYPREF_= set _EXPLORER_VIEW_SYSTEMPREF_= del /f /q ~TMP.TXT popd exit 

РЕШЕНИЕ 2: ДЛЯ КОМПЬЮТЕРНОГО МОНИТОРА

Этот демонстрационный пакетный файл откроет два windows обозревателя бок о бок и центрируется на экране на другом (непервичном) мониторе рабочего стола с двумя мониторами. Прочтите описание в пакетном файле.

Примечание. Для этой демонстрации я предполагаю, что на левом мониторе находится монитор-1 (основной активный монитор, содержащий панель задач), а правый монитор – монитор-2 (не основной первичный монитор). Если ваша настройка отличается, тогда настройте скрипт.

Используемые инструменты:
1. MonitorInfoView от Нира Софера (41 КБ) ………….. homepage
2. MultiMonitorTool от Нира Софера (102 КБ) ……….. homepage
3. NirCmd Нир Софер (43 KB) …………………………. homepage
4. Пакетный файл (6 КБ) ………………………………….. ……Смотри ниже

Соберите все четыре файла в каталог.
Это пакетный файл, готовый к запуску в любой системе Windows ( запустите его для мгновенной демонстрации ):

 @echo off REM ----- GIVE THIS CONSOLE WINDOW TITLE A UNIQUE STRING ID title OPEN-2-EXPLORER-WINDOWS-SIDE-BY-SIDE-AND-CENTERED-ON-SCREEN-AT-MONITOR-2-OF-A-MULTI-MONITOR-DESKTOP___20140101024519 pushd %~dp0 REM ----- HIDE THIS CONSOLE WINDOW (HOOKS THE WINDOW TITLE) nircmd.exe win hide ititle "OPEN-2-EXPLORER-WINDOWS-SIDE-BY-SIDE-AND-CENTERED-ON-SCREEN-AT-MONITOR-2-OF-A-MULTI-MONITOR-DESKTOP___20140101024519" REM ********************** DESCRIPTION ************************************ REM ** This script opens one or more windows with specified screen properties REM ** at a chosen monitor of a multi-monitor desktop. The "X/Y position" and REM ** "W/H size" of the windows are auto-set by this script and the monitor REM ** resolutions are auto-calculated to suit. REM ** 'MonitorInfoView.exe' is the helper tool used to isolate the resolution REM ** info of the primary monitor (containing the taskbar). REM ** 'MultiMonitorTool.exe' is the helper tool used to capture the REM ** resolution info of all monitors and for isolating the resolution info REM ** of the other (non-primary) monitor. REM ** 'nircmd.exe' is the tool performing all the display trickery. REM ** REM ** To tweak this script, go to the code section named: REM ** >>>>> USER INPUT/PREFERENCES ARE ALL SET HERE <<<<< REM *********************************************************************** REM ----- CLEAR ANY PREVIOUS JOB OUTPUTS IF THEY EXIST if exist ~TMP.TXT type NUL > ~TMP.TXT if exist ~TMP2.TXT type NUL > ~TMP2.TXT REM ----- OUTPUT THE PRIMARY MONITOR (MONITOR-1) INFORMATION TO A TEXT FILE MonitorInfoView.exe /hideinactivemonitors 1 /stext ~TMP.TXT REM ----- ISOLATE THE RESOLUTION LINE OF MONITOR-1, REMOVING ALL THE OTHER LINES IN THE TEXT FILE for /f "delims=" %%A in ('type "~TMP.TXT" ^|find.exe /i "Maximum Resolution"') do echo %%A>~TMP.TXT REM ----- GET THE RESOLUTION NUMBERS OF MONITOR-1, AND SET THEM AS VARIABLES for /f "tokens=3,4 delims=:X " %%A in ('type "~TMP.TXT"') do ( set _M1_SCREENW_=%%A set _M1_SCREENH_=%%B ) REM ----- OUTPUT INFO OF ALL MONITORS TO TEXT FILE MultiMonitorTool.exe /stext ~TMP.TXT REM ----- TRY REMOVING MONITOR-1 RESOLUTION LINE (KEEPING MONITOR-2 RESOLUTION LINE) find.exe /i /v "%_M1_SCREENW_% X %_M1_SCREENH_%" < ~TMP.TXT > ~TMP2.TXT REM ----- TRY ISOLATING MONITOR-2 RESOLUTION LINE (REMOVING ALL THE OTHER LINES IN THE TEXT FILE) for /f "delims=" %%A in ('type "~TMP2.TXT" ^|find.exe /i "Maximum Resolution"') do echo %%A>~TMP2.TXT REM ----- CONDITIONALLY GET THE RESOLUTION NUMBERS OF MONITOR-2, AND SET THEM AS VARIABLES ... REM ----- CASE(A): IF MONITORS HAVE SAME RESOLUTION, ASSUME NO LINES HAVE STRING "Maximum Resolution". REM ----- CASE(B): IF MONITORS HAVE DIFFERENT RESOLUTION, ASSUME ONE LINE HAS STRING "Maximum Resolution". find.exe /i /c "Maximum Resolution" ~TMP2.TXT if %ERRORLEVEL% equ 1 ( set _M2_SCREENW_=%_M1_SCREENW_%&set _M2_SCREENH_=%_M1_SCREENH_% ) else ( for /f "tokens=3,4 delims=:X " %%A in ('type "~TMP2.TXT"') do set _M2_SCREENW_=%%A&set _M2_SCREENH_=%%B ) REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REM >>>>>>>>>> USER INPUT/PREFERENCES ARE ALL SET HERE [BEGIN] <<<<<<<<<<<< REM ----- MONITOR-2 LEFT WINDOW PROPERTIES set _M2_WINLEFT_=%SYSTEMDRIVE% set /a _M2_WINLEFTW_=(%_M2_SCREENW_% / 3) + 50 set /a _M2_WINLEFTH_=(%_M2_SCREENH_% / 2) + 200 set /a _M2_WINLEFTX_=(%_M1_SCREENW_%) + (%_M2_SCREENW_% - %_M2_WINLEFTW_%) / 5 set /a _M2_WINLEFTY_=(%_M2_SCREENH_% - %_M2_WINLEFTH_%) / 2 REM ----- MONITOR-2 RIGHT WINDOW PROPERTIES set _M2_WINRIGHT_=%USERPROFILE% set /a _M2_WINRIGHTW_=(%_M2_SCREENW_% / 3) + 50 set /a _M2_WINRIGHTH_=(%_M2_SCREENH_% / 2) + 200 set /a _M2_WINRIGHTX_=(%_M2_WINLEFTX_%) + (%_M2_WINLEFTW_%) set /a _M2_WINRIGHTY_=(%_M2_SCREENH_% - %_M2_WINRIGHTH_%) / 2 REM ----- ADJUST THE WAIT TIME (MILLISECONDS) BETWEEN EACH WINDOW LAUNCH. REM ----- IF TOO QUICK, THE FOLLOWING WINDOW WILL NOT SET IN THE CORRECT SCREEN POSITION. REM ----- | FOR FAST SYSTEM: TRY 200 | NORMAL SYSTEM: TRY 400-600 | BLOATED SYSTEM: TRY 800-1200+ set _WAITTIME_=400 REM ----- ON WINDOWS NT5 (XP, 2000), RUNNING EXPLORER WITH THE 'N' SWITCH WOULD RELIABLY GIVE REM ----- YOU 1-PANE VIEW (HIDDEN LEFT NAV PANE). ALSO, SHOWING/HIDING OF THE LEFT NAV PANE WAS REM ----- INSTANTLY TOGGLED BY AN ICON ON THE EXPLORER GUI TOOLBAR. REM ----- ON WINDOWS NT6 (VISTA, 7), EXPLORER WILL NOT OBEY YOUR COMMANDS AT ALL TIMES AND IT REM ----- IS A "PITA" TO CONTROL THE GRAPHIC USER INTERFACE. REM ----- THIS INPUT SECTION IS A WORKAROUND TO FORCE AN INSTANCE OF NT6 EXPLORER TO BE REM ----- TOGGLED TO A SPECIFIED VIEW. REM ----- | REM ----- | INSERT ONE OF THESE VALUES INTO THE VARIABLE _EXPLORER_VIEW_MYPREF_ REM ----- | | FOR EXPLORER 2-PANE VIEW (SHOW LEFT NAVPANE): 150100000100000000000000E5010000 REM ----- | | FOR EXPLORER 1-PANE VIEW (HIDE LEFT NAVPANE): 1501000000000000000000007B020000 set _EXPLORER_VIEW_MYPREF_=1501000000000000000000007B020000 REM >>>>>>>>>> USER INPUT/PREFERENCES ARE ALL SET HERE [END] <<<<<<<<<<<<<< REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REM ----- RUN THE TASK . . . REM ----- REGKEY 'HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Modules' DOES NOT EXIST IN NT5 OR EARLIER REM ----- BUT TO ELIMINATE DOUBT WE WILL PERFORM A CONDITIONAL VERSION CHECK for /f "tokens=2 delims=[]" %%A in ('ver') do set _THIS_OS_VERSTRING_=%%A set _THIS_OS_VERSTRING_=%_THIS_OS_VERSTRING_:Version =% for /f "tokens=1,2,3* delims=." %%A in ("%_THIS_OS_VERSTRING_%") do set _THIS_OS_MAJORVERSION_=%%A if %_THIS_OS_MAJORVERSION_% leq 5 goto SKIP1 set _EXPLORER_VIEW_REGKEY_=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Modules\GlobalSettings\Sizer set _EXPLORER_VIEW_REGVAL_=PageSpaceControlSizer if exist ~TMP.TXT type NUL > ~TMP.TXT reg.exe query %_EXPLORER_VIEW_REGKEY_% > ~TMP.TXT if %ERRORLEVEL% equ 1 goto SKIP1 for /f "delims=" %%A in ('type "~TMP.TXT" ^|find.exe /i "%_EXPLORER_VIEW_REGVAL_%"') do echo %%A>~TMP.TXT for /f "tokens=1-3 delims= " %%A in ('type "~TMP.TXT"') do set _EXPLORER_VIEW_SYSTEMPREF_=%%C reg.exe add %_EXPLORER_VIEW_REGKEY_% /v %_EXPLORER_VIEW_REGVAL_% /t REG_BINARY /d %_EXPLORER_VIEW_MYPREF_% /f 2>nul >nul nircmd.exe wait %_WAITTIME_% :SKIP1 nircmd.exe exec show "explorer.exe" /n,%_M2_WINLEFT_% nircmd.exe wait %_WAITTIME_% nircmd.exe win setsize foreground %_M2_WINLEFTX_% %_M2_WINLEFTY_% %_M2_WINLEFTW_% %_M2_WINLEFTH_% nircmd.exe wait %_WAITTIME_% nircmd.exe exec show "explorer.exe" /n,%_M2_WINRIGHT_% nircmd.exe wait %_WAITTIME_% nircmd.exe win setsize foreground %_M2_WINRIGHTX_% %_M2_WINRIGHTY_% %_M2_WINRIGHTW_% %_M2_WINRIGHTH_% REM ----- RESET SYSTEM PREF, CLEAR MEMORY, CLEANUP, QUIT . . . find.exe /i /c "%_EXPLORER_VIEW_REGVAL_%" ~TMP.TXT if %ERRORLEVEL% equ 1 goto SKIP2 nircmd.exe wait %_WAITTIME_% nircmd.exe wait %_WAITTIME_% reg.exe add %_EXPLORER_VIEW_REGKEY_% /v %_EXPLORER_VIEW_REGVAL_% /t REG_BINARY /d %_EXPLORER_VIEW_SYSTEMPREF_% /f 2>nul >nul :SKIP2 set _M1_SCREENW_= set _M1_SCREENH_= set _M2_SCREENW_= set _M2_SCREENH_= set _M2_WINLEFT_= set _M2_WINLEFTX_= set _M2_WINLEFTY_= set _M2_WINLEFTW_= set _M2_WINLEFTH_= set _M2_WINRIGHT_= set _M2_WINRIGHTX_= set _M2_WINRIGHTY_= set _M2_WINRIGHTW_= set _M2_WINRIGHTH_= set _WAITTIME_= set _THIS_OS_VERSTRING_= set _THIS_OS_MAJORVERSION_= set _EXPLORER_VIEW_REGKEY_= set _EXPLORER_VIEW_REGVAL_= set _EXPLORER_VIEW_MYPREF_= set _EXPLORER_VIEW_SYSTEMPREF_= del /f /q ~TMP.TXT del /f /q ~TMP2.TXT popd exit 

Больше . , ,
Запустите программу командной строки и задайте положение / размер windows консоли.

Этот демонстрационный пакетный файл запускает программу командной строки и задает положение и размер windows консоли командной строки. Общая тема этой партии такая же, как и в предыдущих двух решениях, но для этой работы были некоторые уникальные проблемы и обходные пути – это окно командной строки, размещенное «CMD.EXE», а не окно графического интерфейса, например ‘EXPLORER.EXE’ —- Для получения дополнительной информации прочитайте все комментарии в пакетном файле. Прочтите описание.

Используемые инструменты:
1. MonitorInfoView от Нира Софера (41 КБ) …….. homepage
2. NirCmd Нир Софер (43 КБ) ……………………. homepage
3. GetPIDs Daniel Scheibli (280 KB) ………….. homepage
4. Программа для командной строки ……………………. для этой демонстрации, я запускаю «UPX.EXE» из того же каталога, что и пакет. .. homepage
5. Пакетный файл (6 КБ) ………………………………….. Смотри ниже

Соберите все пять файлов в каталог.
Это пакетный файл, готовый к запуску в любой системе Windows (запустите его для мгновенной демонстрации) :

Что будет делать эта демонстрационная партия, помимо представления вам пользовательского windows консоли, будет запускаться upx.exe с помощью командной строки --best -v -o getpids-compressed.exe getpids.exe . Мы собираемся сжать наш инструмент GetPIDs (который составляет 280 КБ) до 88 КБ! ………. после запуска, дважды щелкните по строке заголовка этого windows консоли, чтобы увидеть интересное явление; это консольное окно ведет себя как графический интерфейс!

 @echo off setlocal enabledelayedexpansion enableextensions pushd %~dp0% REM ----- ADD SOME USEFUL INFORMATION TO THIS CONSOLE WINDOW TITLE. for /f "tokens=3" %%A in ('getpids.exe') do set _PROCESS_ID_=%%A title This batch file runs a command-line program and sets the position and size of its console window (PROCESS ID = %_PROCESS_ID_%) REM ********************** DESCRIPTION ************************************ REM ** This script opens a command-line program console window with specified REM ** screen properties at the primary monitor (containing the taskbar). REM ** The "X/Y position" and "W/H size" of the console window is auto-set by REM ** this script and the monitor resolution is auto-calculated to suit. REM ** 'MonitorInfoView.exe' is the helper tool used to capture the resolution REM ** info of the monitor. REM ** 'nircmd.exe' is the tool performing all the display trickery. REM ** 'getpids.exe' is the helper tool used to capture the Process ID of the REM ** working batch file, thus allowing us to identify which CMD.EXE host this REM ** console window belongs to when looking at Task Manager. REM ** REM ** To tweak this script, go to the code section named: REM ** >>>>> USER INPUT/PREFERENCES ARE ALL SET HERE <<<<< REM *********************************************************************** REM ----- CLEAR ANY PREVIOUS JOB OUTPUTS IF THEY EXIST if exist ~TMP.TXT type NUL > ~TMP.TXT REM ----- OUTPUT THE PRIMARY MONITOR INFORMATION TO A TEXT FILE MonitorInfoView.exe /hideinactivemonitors 1 /stext ~TMP.TXT REM ----- ISOLATE THE RESOLUTION LINE, REMOVING ALL THE OTHER LINES IN THE TEXT FILE for /f "delims=" %%A in ('type "~TMP.TXT" ^|find.exe /i "Maximum Resolution"') do echo %%A>~TMP.TXT REM ----- GET THE RESOLUTION NUMBERS, AND SET THEM AS VARIABLES for /f "tokens=3,4 delims=:X " %%A in ('type "~TMP.TXT"') do set _SCREENW_=%%A& set _SCREENH_=%%B REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REM >>>>>>>>>> USER INPUT/PREFERENCES ARE ALL SET HERE [BEGIN] <<<<<<<<<<<< REM ----- ---------------------------------------- REM ----- |COMMAND-LINE PROGRAM TO BE RUN: FILE NAME (WITH EXTENSION) REM ----- | REM ----- | |IF PROG TO BE RUN IS 'CMD.EXE' (WINDOWS COMMAND PROCESSOR) REM ----- | |ALSO READ THE NEXT COMMENTS ABOUT SETTING SWITCHES set _MYPROGRAM_=upx.exe REM ----- ---------------------------------------- REM ----- |COMMAND-LINE PROGRAM TO BE RUN: SWITCHES (TO BE PASSED TO THE PROGRAM) REM ----- | REM ----- | |YOU CAN LEAVE THIS VARIABLE WITH A BLANK VALUE IF RUNNING THE PROG WITHOUT ANY PARAMETERS REM ----- | | REM ----- | | |IF THE VALUE CONTAINS THE CHARS '|' OR '<' OR '>' THIS BATCH WILL FAIL TO RUN !!! REM ----- | | | REM ----- | | | |YOU CAN APPEND EXTRA TEXT TO THE END OF THE COMMAND BY USING THE AMPERSAND CHARACTER '&' REM ----- | | | | EXAMPLES: REM ----- | | | | set _MYPROGRAMSWITCHES_=dir "%systemroot%\system32" /a/o/s/4 & this text will be ignored; useful for adding some inline comments. REM ----- | | | | set _MYPROGRAMSWITCHES_=dir "%systemroot%\system32" /a/o/s/4 & this works too, and the extra blank spaces will also be ignored. REM ----- | | | | REM ----- | | | | |IF PROG TO BE RUN IS 'CMD.EXE' (WINDOWS COMMAND PROCESSOR), PATH ARGUMENTS MUST POINT TO A SPECIFIC LOCATION REM ----- | | | | |AND BE ABSOLUTE OR INCLUDE ENVIRONMENT VARIABLES, AND ALWAYS ENCLOSE PATHS IN QUOTES. REM ----- | | | | | EXAMPLES: REM ----- | | | | | set _MYPROGRAMSWITCHES_=type "C:\Folder With Spaces\File.txt" REM ----- | | | | | set _MYPROGRAMSWITCHES_=type "C:\FolderWithoutSpaces\File.txt" REM ----- | | | | | set _MYPROGRAMSWITCHES_=type "%SYSTEMROOT%\..\Folder With Spaces\File.txt" REM ----- | | | | | set _MYPROGRAMSWITCHES_=type %0 <<<<<< cmd.exe dir "%systemroot%\system32" /a/o/s/4 <===== REM ----- | | |TO SOLVE THIS PROBLEM, SET THE 'LINES' VALUE OF 'MODE' TO A VERY HIGH NUMBER REM ----- | | |THE MAXIMUM NUMBER IS 32000 (ON MY SYSTEM); 'MODE' WILL BE IGNORED IF THE NUMBER IS HIGHER !!! color 0A mode.com con:cols=%_SCREENW_% lines=10000 REM ----- ---------------------------------------- REM ----- |DELETE THE TEMP TEXT FILE MADE BY 'MonitorInfoView.exe' REM ----- |COMMENT OUT THE LINE IF YOU DON'T CARE ABOUT DELETING IT del /f /q ~TMP.TXT 2>nul >nul REM >>>>>>>>>> USER INPUT/PREFERENCES ARE ALL SET HERE [END] <<<<<<<<<<<<<< REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REM ----- RUN THE TASK . . . nircmd.exe win setsize foreground %_WINX_% %_WINY_% %_WINW_% %_WINH_% popd if not defined _MYPROGRAMDIR_ set _MYPROGRAMDIR_=%~dp0 if "!_MYPROGRAMDIR_!" == "." set _MYPROGRAMDIR_=%~dp0 if "!_MYPROGRAMDIR_!" == ".\" set _MYPROGRAMDIR_=%~dp0 pushd %_MYPROGRAMDIR_% if not exist %_MYPROGRAMDIR_% goto _SKIP_ set _CONVERT_PATH_="%CD%" set _CONVERT_PATH_=%_CONVERT_PATH_:"=% set _MYPROGRAMDIR_=%_CONVERT_PATH_% :_SKIP_ popd echo =============================================================================== echo PROGRAM ..............: !_MYPROGRAM_! if "!_MYPROGRAM_!"=="cmd.exe" (echo PROGRAM DIR ..........: %SYSTEMROOT%\system32) else (echo PROGRAM DIR ..........: !_MYPROGRAMDIR_!) echo PROGRAM SWITCHES .....: !_MYPROGRAMSWITCHES_! echo =============================================================================== if "!_MYPROGRAM_!"=="cmd.exe" (goto _PROGRAM_IS_CMD_) else (goto _PROGRAM_IS_OTHER_) :_PROGRAM_IS_CMD_ cd /d "%SYSTEMROOT%\system32" !_MYPROGRAMSWITCHES_! echo. & echo. & echo. goto _END_ :_PROGRAM_IS_OTHER_ cd /d "!_MYPROGRAMDIR_!" if "%CD%\!_MYPROGRAM_!" == "%CD%\" goto _ERRORMESSAGE_ if not exist "%CD%\!_MYPROGRAM_!" goto _ERRORMESSAGE_ "!_MYPROGRAMDIR_!\!_MYPROGRAM_!" !_MYPROGRAMSWITCHES_! echo. & echo. & echo. goto _END_ :_ERRORMESSAGE_ cls color 4F echo =============================================================================== echo PROGRAM ..............: !_MYPROGRAM_! echo PROGRAM DIR ..........: !_MYPROGRAMDIR_! echo PROGRAM SWITCHES .....: !_MYPROGRAMSWITCHES_! echo =============================================================================== echo ^^!^^!^^! ERROR ^^!^^!^^! echo. echo The program has failed to run; the path set by the above values does not exist. echo Please exit this window and check the values you have set in this batch file. echo. echo This batch file is located here: echo %0 echo. & echo. & echo. & echo. & echo. :_END_ REM ----- CLEAR VARIABLE VALUES FROM MEMORY . . . set _PROCESS_ID_= set _SCREENW_= set _SCREENH_= set _MYPROGRAM_= set _MYPROGRAMSWITCHES_= set _MYPROGRAMDIR_= set _WINW_= set _WINH_= set _WINX_= set _WINY_= set _CONVERT_PATH_= REM ----- STOP THIS CONSOLE WINDOW FROM CLOSING !!!IMPORTANT!!! . . . REM ----- SEE  cmd.exe 

Проверьте StartX . Я не использовал его, но похоже, что вы можете использовать его для запуска приложения с определенной позицией и размером.

StartX – очень простая утилита, позволяющая вам вызывать API CreateProcess из командной строки.

Некоторые из параметров командной строки:

 StartX ["title"] [/Dpath] [/MIN] [/MAX] [/Px,y] [/Scx1,cy1] 

x, y: задает смещение x и y в пикселях в верхнем левом углу windows, если создается новое окно. Смещение находится в верхнем левом углу экрана.

cx1, cy2: определяет ширину и высоту в пикселях windows, если создается новое окно.

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

В качестве простого примера, чтобы запустить два экземпляра Explorer, измените размер (и переместите их), затем выполните то же самое с окном cmd, что вы можете сделать что-то вроде этого:

 Run Explorer /n,c:\develop\jboss-4.2.3.GA\server\default\deploy Run Explorer /n,c:\develop\Project\Mapping\deploy WinMove, deploy, server\default, 0, 0, 200, 200 WinMove, deploy, Project\Mapping, 200, 0, 200, 200 Run cmd /c SetupEnvCmd.cmd WinMove, C:\develop\jboss-4.2.3.GA\bin, 0, 200 

Справка по WinMove

  • Как создать таймер пакетного файла для выполнения / вызова другой партии в течение дня
  • Просто сжимайте 1 папку в пакетном режиме с помощью командной строки WinRAR?
  • В какой момент `for` или` for / R` перечисляет каталог (дерево)?
  • Как установить переменную внутри цикла для / F
  • Арифметические операции с HH: MM: SS раз в пакетном файле
  • Каковы недокументированные функции и ограничения команды Windows FINDSTR?
  • Пример замедленного расширения в пакетном файле
  • изменение рабочего каталога команды из java
  • Командная строка Windows для чтения первой строки из текстового файла
  • Как запустить несколько .BAT-файлов в файле .BAT
  • Как я могу избежать восклицательного знака! в сценариях cmd?
  • Interesting Posts

    Бесплатное программное обеспечение водяного знака для пакетного изображения

    Создание (и доступ) разреженной матрицы с записями NA по умолчанию

    Как генерировать все возможные 3-значные комбинации чисел 0-6

    Как установить версию .net Framework 4.5 в пуле приложений IIS 7

    Перегрузка с другим возвращаемым типом в Java?

    Страница входа в другой домен

    Установите Windows XP / 7 без дисковода компакт-дисков, когда BIOS не поддерживает загрузку с USB-устройств

    Как сделать разделение 2 ints порождать float вместо другого int?

    Lion не удалось загрузить SSL-сайты

    Пример примера streamparse wordcount

    Как изменить меню загрузки для Windows 7?

    Лучший способ форматирования входной информации для редактирования editText?

    Как декодировать строку с кодировкой base64?

    Как запустить программу с аргументами командной строки в Windows 'cmd с командой' start '?

    Несколько функций с тем же именем

    Давайте будем гением компьютера.