Показать полную графическую версию : запуск бат файла с указанием месторасположения окна
Тимур_Макенов@vk
02-03-2013, 13:06
здравствуйте!
имеются 2 бат файла просто запускающие "ping" к указанному IP адресу. при запуске их поочередно одно окно накладывается на другое. приходиться ручками перемещать чтоб видеть оба окна параллельно. хотелось бы это автоматизировать. как это можно осуществить?
создаешь ярлык на файл bat - ПКМ - свойства - расположение - положение окна
вводишь необходимое расположение....
также можно выбрать: шрифт, цвет и т.д.
Тимур_Макенов@vk
02-03-2013, 19:47
создаешь ярлык на файл bat - ПКМ - свойства - расположение - положение окна
вводишь необходимое расположение....
также можно выбрать: шрифт, цвет и т.д. »
этим способом задается глобальное положение всех вызываемых окон командной строки. в моем же случае необходимо для каждого батника отдельное расположение окна
глобальное положение всех вызываемых окон командной строки »
с чего вы это взяли? Ярлык создается на каждый bat отдельно!!! И настройки в свойствах ярлыка индивидуальные!!!
Тимур_Макенов@vk
03-03-2013, 00:53
с чего вы это взяли? Ярлык создается на каждый bat отдельно!!! И настройки в свойствах ярлыка индивидуальные!!! »
потому что это первое что пришло в голову, и я это испробовал. запускаешь 1 бат файл, заходим в свойство выставляем нужные нам значения в окне расположение. запускаем 2 бат файл, и проделываем те же пункты но толь расположение меняем так, чтоб не накладывалось на 1. ок, сделали. закрываем оба окна. запускаем по новой и вуаля! сохранены настройки 2-го бат файла и окна друг на друге!
запускаешь 1 бат файл, заходим в свойство »
Тимур_Макенов@vk, Вы что-то явно делаете не так. Сначала создаёте пакетные файлы. Затем создаёте на них ярлыки. Затем, не запуская пакетные файлы, настраиваете свойства созданных ярлыков, задавая разное расположение окон консоли. И только затем запускаете пакетные файлы через настроенные ярлыки.
Тимур_Макенов@vk
03-03-2013, 02:27
Тимур_Макенов@vk, Вы что-то явно делаете не так. Сначала создаёте пакетные файлы. Затем создаёте на них ярлыки. Затем, не запуская пакетные файлы, настраиваете свойства созданных ярлыков, задавая разное расположение окон консоли. И только затем запускаете пакетные файлы через настроенные ярлыки. »
я вас понял, таким методом все получится, но есть один нюанс....
бат файлы я запускаю через специальные отведенные клавиши (клава такая мультимедийная). к сожалению при назначении клавише ярлыка к бат файлу (через ПО клавиатуры) такая фишка не действует))). если указать ярлык, то она его полностью игнорит, берет из ярлыка только ссылку к батнику и запускает его. по этому так важно указать в самом бат файле расположение окон
Тимур_Макенов@vk, попробуйте WSH:
Option Explicit
Const SW_NORMAL = 1
Dim objSWbemObjectEx_Win32_Process
Dim objSWbemObjectEx_Win32_ProcessStartup
Dim lngProcessID
Dim strPath1
Dim strPath2
strPath1 = "E:\Песочница\0231\0001.cmd"
strPath2 = "E:\Песочница\0231\0002.cmd"
With WScript.CreateObject("WbemScripting.SWbemLocator")
With .ConnectServer(".", "root\cimv2")
Set objSWbemObjectEx_Win32_Process = .Get("Win32_Process")
Set objSWbemObjectEx_Win32_ProcessStartup = .Get("Win32_ProcessStartup").SpawnInstance_
With objSWbemObjectEx_Win32_ProcessStartup
.ShowWindow = SW_NORMAL
.CreateFlags = 16
.X = 25
.Y = 100
.XSize = 600
.YSize = 300
.XCountChars = 40
.YCountChars = 3000
.Title = "Ping 1"
.FillAttribute = 30
End With
If objSWbemObjectEx_Win32_Process.Create("""" & strPath1 & """", Empty, objSWbemObjectEx_Win32_ProcessStartup, lngProcessID) <> 0 Then
WScript.Echo "Can't create process [" & strPath1 & "]"
WScript.Quit 1
End If
With objSWbemObjectEx_Win32_ProcessStartup
.X = 650
.Title = "Ping 2"
.FillAttribute = 91
End With
If objSWbemObjectEx_Win32_Process.Create("""" & strPath2 & """", Empty, objSWbemObjectEx_Win32_ProcessStartup, lngProcessID) <> 0 Then
WScript.Echo "Can't create process [" & strPath2 & "]"
WScript.Quit 2
End If
End With
End With
WScript.Quit 0
Если у Вас в пакетных файлах только «ping.exe» — можно обойтись и без пакетных файлов, указывая команду непосредственно; проще будет закрывать по Ctrl-C.
Тимур_Макенов@vk, таким методом все получится »
а я предлагал какой то другой?
Тимур_Макенов@vk
03-03-2013, 09:13
а я предлагал какой то другой? »
я вас сразу не понял, my bad))
но как я и сказал для меня этот способ не подходит...
Если у Вас в пакетных файлах только «ping.exe» — можно обойтись и без пакетных файлов, указывая команду непосредственно; проще будет закрывать по Ctrl-C. »
да у меня в батнике только одна команда ping. я так понял вы имели ввиду запускать пинг непосредственно через саму exe-шку (ping.exe). но чем это поможет для моего случая? можно указать расположение окна?
да у меня в батнике только одна команда ping. я так понял вы имели ввиду запускать пинг непосредственно через саму exe-шку (ping.exe). но чем это поможет для моего случая? »
Речь выше шла про пакетные файлы — я сделал для них.
А Вы попробуйте:
Option Explicit
Const SW_NORMAL = 1
Dim objSWbemObjectEx_Win32_Process
Dim objSWbemObjectEx_Win32_ProcessStartup
Dim lngProcessID
Dim strCommandLine1
Dim strCommandLine2
strCommandLine1 = "ping.exe -t ya.ru"
strCommandLine2 = "ping.exe -t google.com"
With WScript.CreateObject("WbemScripting.SWbemLocator")
With .ConnectServer(".", "root\cimv2")
Set objSWbemObjectEx_Win32_Process = .Get("Win32_Process")
Set objSWbemObjectEx_Win32_ProcessStartup = .Get("Win32_ProcessStartup").SpawnInstance_
With objSWbemObjectEx_Win32_ProcessStartup
.ShowWindow = SW_NORMAL
.CreateFlags = 16
.X = 25
.Y = 100
.XSize = 600
.YSize = 300
.XCountChars = 40
.YCountChars = 3000
.Title = "Ping 1"
.FillAttribute = 30
End With
If objSWbemObjectEx_Win32_Process.Create(strCommandLine1, Empty, objSWbemObjectEx_Win32_ProcessStartup, lngProcessID) <> 0 Then
WScript.Echo "Can't create process [" & strCommandLine1 & "]"
WScript.Quit 1
End If
With objSWbemObjectEx_Win32_ProcessStartup
.X = 650
.Title = "Ping 2"
.FillAttribute = 91
End With
If objSWbemObjectEx_Win32_Process.Create(strCommandLine2, Empty, objSWbemObjectEx_Win32_ProcessStartup, lngProcessID) <> 0 Then
WScript.Echo "Can't create process [" & strCommandLine2 & "]"
WScript.Quit 2
End If
End With
End With
WScript.Quit 0
Сохраните код в файл с расширением .vbs и запустите.
Yoshimura
22-01-2016, 21:52
Речь выше шла про пакетные файлы — я сделал для них.
А Вы попробуйте:
читать дальше »
Сохраните код в файл с расширением .vbs и запустите. »
Спасибо огромное! И мне помогло. Долго мучался искал как сделать чтоб проверка сети "красиво запускалась" в один клик. Ваш код просто супер. С небольшими твиками вот он ниже. Запускается три окна - пинг на роутер (есть подозрения что проблемы именно с ним), на EX.UA, и конечно же GOOGLE.COM. Сделал фон чуть более контрастным (черный с белым, красным и зеленым), а так же указал заголовки окон (тоже удобно знать кого пингует это окно. Окна, при разрешении моего ноута занимают весь экран - пинг роутера всю левую половину, пинг екса - верхнюю правую часть, пинг гугла - нижнюю правую.
Option Explicit
Const SW_NORMAL = 1
Dim objSWbemObjectEx_Win32_Process
Dim objSWbemObjectEx_Win32_ProcessStartup
Dim lngProcessID
Dim strCommandLine1
Dim strCommandLine2
Dim strCommandLine3
strCommandLine1 = "ping.exe -t 192.168.1.1"
strCommandLine2 = "ping.exe -t ex.ua"
strCommandLine3 = "ping.exe -t google.com"
With WScript.CreateObject("WbemScripting.SWbemLocator")
With .ConnectServer(".", "root\cimv2")
Set objSWbemObjectEx_Win32_Process = .Get("Win32_Process")
Set objSWbemObjectEx_Win32_ProcessStartup = .Get("Win32_ProcessStartup").SpawnInstance_
With objSWbemObjectEx_Win32_ProcessStartup
.ShowWindow = SW_NORMAL
.CreateFlags = 16
.X = 0
.Y = 0
.XSize = 640
.YSize = 690
.XCountChars = 40
.YCountChars = 3000
.Title = "Ping ROUTER"
.FillAttribute = 2
End With
If objSWbemObjectEx_Win32_Process.Create(strCommandLine1, Empty, objSWbemObjectEx_Win32_ProcessStartup, lngProcessID) <> 0 Then
WScript.Echo "Can't create process [" & strCommandLine1 & "]"
WScript.Quit 1
End If
With objSWbemObjectEx_Win32_ProcessStartup
.X = 680
.XSize = 640
.YSize = 330
.Title = "Ping EX.UA"
.FillAttribute = 4
End With
If objSWbemObjectEx_Win32_Process.Create(strCommandLine2, Empty, objSWbemObjectEx_Win32_ProcessStartup, lngProcessID) <> 0 Then
WScript.Echo "Can't create process [" & strCommandLine2 & "]"
WScript.Quit 2
End If
With objSWbemObjectEx_Win32_ProcessStartup
.X = 685
.Y = 365
.XSize = 640
.YSize = 330
.Title = "Ping GOOGLE.com"
.FillAttribute = 7
End With
If objSWbemObjectEx_Win32_Process.Create(strCommandLine3, Empty, objSWbemObjectEx_Win32_ProcessStartup, lngProcessID) <> 0 Then
WScript.Echo "Can't create process [" & strCommandLine2 & "]"
WScript.Quit 3
End If
End With
End With
WScript.Quit 0
Yoshimura
13-12-2017, 00:47
Прошло почти два года. Теперь на Винде 10 и сервер 2016 этот скрипт частично развалился. Все параметры работают, кроме размера окна. Он теперь открывает три больших окна с нужными координатами. Вопрос - что не так со скриптом или виндой и как это исправить? Пробую менять параметры - на координаты и цвета реагирует, на размеры окон - никак. :(
Yoshimura, скриншоты, Ваш код, и ждать, пока кто-нибудь с Windows 10 на борту проверит-подтвердит таковое поведение.
Yoshimura
13-12-2017, 02:46
Уже все, нашел сам как исправить. Это как то связанно с нововведениями МелкоСофта в новой версии консоли встроенной в винду. Это можно отключить.
После запуска любого консольного приложения, нужно нажать правой кнопкой мыши на иконке консоли (самый левый верхний угол), в появившемся меню выбрать "Значения по умолчанию". Там во вкладке "настройки" выбрать внизу "Использовать прежнюю версию консоли". Возможно еще понадобиться зайти во вкладку "Расположение" и убрать галку в самом низу "автоматический выбор".
Данные действия возвращают поведение консоли "назад", к привычному по 7 винде.
Только нужно учитывать что это применяет настройки для всех консольных приложений.
Это как то связанно…»
Если сумеете ещё определить как именно, с чем конкретно связано — будет совсем хорошо.
Yoshimura
13-12-2017, 03:10
Сложно сказать. Я довольно внимательно изучил код и конкретно функцию которая создает окна - именно с ней и была проблема. Все ее атрибуты работают и в новой версии консоли. Все кроме указания размера окна. С чем это связано я не знаю. На старой версии работает отлично как и было изначально. Разбираться в деталях дальше не вижу смысла и не имею желания - теперь работает как мне нужно и это хорошо.
Yoshimura, Вы так и не показали, что происходит, на скриншотах. Посему, я имел в виду, чтобы Вы определили конкретную настройку/возможность в новой версии консоли, которая препятствует ранее корректной работе класса Win32_ProcessStartup. Возможно, дело в новых умолчаниях для буфера окна, возможно — в чём-то другом, мне глядеть-проверять не на чем.
Yoshimura
13-12-2017, 03:53
Iska, Я чесс слово не могу понять что я делаю не так или что от меня требуется. Я никогда еще не объяснял так долго не проблему, а ее, уже найденное собой же решение...
Ок, давайте еще раз что было/стало.
Итак сначала. Ваш код (спасибо большое еще раз за него) несколькими сообщениями выше я несколько модифицировал под свои цели. Его же и выложил сразу за вашим последним сообщением (Ваше от 03-03-2013 08:33, мое от 22-01-2016 20:52). Все было мило и прекрасно пока я не обновился на Windows 10, и на некоторых машинах на Windows Server 2016. Там этот код не дает задать размер окон - они появляются с неким "стандартным" размером в не зависимости от того как я менял этот код. Проблема еще усугубляется тем что обычно я работаю на мониторах с не очень большим разрешением, либо вообще через TeamViewer. Может для 1080p или тем более 4K монитора это совсем не было бы проблемой. Для меня это проблема так как и без того места мало на экране. Скриншот в приложении.
Повторюсь я не знаю какие методы, обновления или умолчания в новой версии консоли. Я вообще не знаю что такое новая версия консоли. Я просто методом тыка пришел к тому что если поставить галку в настройках этой самой консоли "Использовать прежнюю версию консоли" то проблема исчезает. Все это уже было описано двумя сообщениями выше с конкретными скриншотами куда и что нужно нажимать. Я не знаю какие от этого меняются буфера, настройки внутри системы и т.д. Но я знаю что раньше была проблема, после нажатия этой галки эта проблема решилась.
Парой сообщений выше есть мой пост с инструкцией как эту проблему решить, если кому вдруг понадобиться. В этом посте в приложении скриншоты с "было" и "стало".
Этого достаточно?
Yoshimura, никаких проблем, кроме одной: выяснить, в чём, собственно, кроется причина такого поведения. Не «в особенностях поведения новой консоли Windows 10.0», а в чём конкретно. Всё остальное было зараз понятно и малоинтересно. И понятно, что Вы сами в дебри WinAPI не лазаете. От Вас я хотел хотя бы скриншот, и Вы его выложили, спасибо Вам за это.
Возможно, как-то поможет совместно-параллельное задание не только пары X/YSize, но и X/YCountChars, не знаю… Повторю, что мне пробовать даже не на чем.
Я вообще не знаю что такое новая версия консоли. »
https://www.google.ru/search?q=%D0%9D%D0%BE%D0%B2%D1%8B%D0%B5+%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82 %D0%B8+%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D0%B8+Window+10
Этого достаточно? »
Да, вполне. Что могли, Вы сделали.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.