Войти

Показать полную графическую версию : [решено] управление окнами из командной строки


iron86
15-05-2012, 19:57
нужно через батник запустить несколько окон и расположить их в определеном порядке
с запуском все понятно
какой командой можно задавать координаты положения окон?
ОС windows 7 x64, windows XP x86 (32)

Iska
15-05-2012, 22:42
iron86, пакетные файлы не поддерживают работу с окнами. Используйте сторонние средства для манипулирования окном приложения после запуска, например NirCmd - Windows command line tool (http://www.nirsoft.net/utils/nircmd.html), либо переходите на PowerShell.

iron86
16-05-2012, 00:29
либо переходите на PowerShel »
это вариант, только не сталкивался еще
там можно сохранять в файлы типа bat?
если да, то какой командой можно реализовать задуманное?

Iska
16-05-2012, 03:23
там можно сохранять в файлы типа bat? »
Поясните Ваш вопрос.

если да, то какой командой можно реализовать задуманное? »
Например, так (на основе Win32 API из PowerShell 1.0 « PowerShell и другие скрипты (http://xaegr.wordpress.com/2009/02/11/powershell1-api/)):
# Создаём объект CodeProvider, для выполнения кода c# в нашем сценарии
$CodeProvider = New-Object -TypeName Microsoft.CSharp.CSharpCodeProvider

# В этой переменной можно задать параметры для выполнения кода
$CompilerParameters = New-Object System.CodeDom.Compiler.CompilerParameters

# Константы задающие действие функции SetWindowPos
$HideWindow = 0x0080
$ShowWindow = 0x0040

# С помощью конструкции "HereString" помещаем в переменную $Code код c# объявляющий функцию SetWindowPos
$Code = @"
using System;
using System.Runtime.InteropServices;
namespace Win32API
{
public class Window
{
[DllImport("user32.dll")]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);
}
}
"@

# Выполняем код c#
[void]$CodeProvider.CompileAssemblyFromSource($CompilerParameters, $Code)

# Запускаем процесс 'notepad.exe'
$oProcess = [System.Diagnostics.Process]::Start("notepad.exe")

# Ожидаем основного окна приложения
[void]$oProcess.WaitForInputIdle()

# Используем объявленную функцию из PowerShell
[void]([Win32API.Window]::SetWindowPos($oProcess.MainWindowHandle, 0, 100, 100, 400, 400, $ShowWindow))

# Запоминаем хэндл окна
$hPrev = $oProcess.MainWindowHandle


# Запускаем процесс 'calc.exe'
$oProcess = [System.Diagnostics.Process]::Start("calc.exe")
[void]$oProcess.WaitForInputIdle()

#Используем объявленную функцию из PowerShell
[void]([Win32API.Window]::SetWindowPos($oProcess.MainWindowHandle, $hPrev, 200, 200, 400, 400, $ShowWindow))

# Запоминаем хэндл окна
$hPrev = $oProcess.MainWindowHandle


# Запускаем процесс 'wordpad.exe' с параметром
$oProcess = [System.Diagnostics.Process]::Start("wordpad.exe", "C:\WINDOWS\system32\eula.txt")
[void]$oProcess.WaitForInputIdle()

#Используем объявленную функцию из PowerShell
[void]([Win32API.Window]::SetWindowPos($oProcess.MainWindowHandle, $hPrev, 300, 300, 500, 500, $ShowWindow))

ferget
16-05-2012, 06:32
на калькулятор почему-то не действует

sewell
16-05-2012, 11:36
iron86, вот на этом сайте (http://www.f2ko.de/programs.php?lang=en&pid=cmd) найдете нужные Вам утилиты для данной задачи.

Iska
16-05-2012, 17:42
sewell, вместо кучи утилит достаточно одного NirCmd (http://www.nirsoft.net/utils/nircmd.html), о котором было упомянуто выше.

iron86
16-05-2012, 18:10
Поясните Ваш вопрос. »
последовательность команд командной строки можно сохранить в исполнительный файл bat, запустив который выполняются команды
можно ли сделать тоже самое в пауер шел?

Iska
16-05-2012, 19:44
iron86, PowerShell — это такая же исполнительная оболочка операционной системы, как и командный процессор. Со своими командами. Основа его — платформа .Net.

iron86
07-06-2012, 02:04
попробовал NirCmd, действительно прикольная штука, но нужных мне команд не нашел
подскажите, кто хорошо знает

Iska
07-06-2012, 04:17
Например, команды exec (http://www.nirsoft.net/utils/nircmd2.html#exec) и win (http://www.nirsoft.net/utils/nircmd2.html#win).

iron86
11-06-2012, 15:24
Например, команды exec и win. »
мне нужно именно задать координаты на мониторе например 0х100, а не минимизировать, максимизировать и скрыть

iron86
11-06-2012, 15:41
с помощью cmdow делаю так:
start file1
start file2
start file3
start file4
cmdow /th

все прекрасно работает, но при каждом перезапуске окна располагаются в разном порядке, необходимо же чтоб порядок расположения всегда был одинаков.
Можно, имея дескриптор окна, задать окну нужное положение?
cmdow позволяет получить дескрипторы всех запущеных окон. как выделить нужный дескриптор?

ferget
11-06-2012, 15:47
параметр /mov left top

Iska
11-06-2012, 17:17
мне нужно именно задать координаты на мониторе например 0х100, а не минимизировать, максимизировать и скрыть »
Должно быть мы с Вами читаем разную документацию к одному и тому же приложению:
win [action] [find] [window to find] [Additional Parameters]

This command allows you to close, hide, show, maximize, and minimize the specified window.

The parameters:
[action]: The action you want to do on the specified window:

* setsize: Set the size of the specified windows. the values in [Additional Parameters] specifies the desired window size - x, y, width, height.
* move: move/resize the window. the values in [Additional Parameters] specifies the number of pixels to move/change: x, y, width, height.

iron86
11-06-2012, 17:54
Iska »
простите, я от этого отказался, использую cmdow

параметр /mov left top »
спасибо, с этим тоже уже разобрался.
осталось только понять как автоматизировать получение десриптора нужного окна и использовать его

дескриптор всех окон, которые есть в панели задач получаю так:
C:\>cmdow /t /p
размер окна и его положение задаю так:
C:\>cmdow 0x040848 /siz 500 200 /mov 100 50
кто б еще объяснил как автоматизировать получение и выделение нужного дескриптора, проблема была б решена :)
спасибо

iron86
12-06-2012, 10:32
Разобрался!
Сделал так:
start ren_7
pause
cmdow "udp://239.1.1.7:1234 - медиа-проигрыватель vlc" /siz 480 540
cmdow "udp://239.1.1.7:1234 - медиа-проигрыватель vlc" /mov 481 0

start rtvi_1
pause
cmdow "udp://239.1.1.1:1234 - медиа-проигрыватель vlc" /siz 480 540
cmdow "udp://239.1.1.1:1234 - медиа-проигрыватель vlc" /mov 0 0

start tnt_5
pause
cmdow "udp://239.1.1.5:1234 - медиа-проигрыватель vlc" /siz 480 540
cmdow "udp://239.1.1.5:1234 - медиа-проигрыватель vlc" /mov 961 0

start tdk_3
pause
cmdow "udp://239.1.1.3:1234 - медиа-проигрыватель vlc" /siz 480 540
cmdow "udp://239.1.1.3:1234 - медиа-проигрыватель vlc" /mov 1441 0

start perez_6
pause
cmdow "udp://239.1.1.6:1234 - медиа-проигрыватель vlc" /siz 480 540
cmdow "udp://239.1.1.6:1234 - медиа-проигрыватель vlc" /mov 0 541

start dom_4
pause
cmdow "udp://239.1.1.4:1234 - медиа-проигрыватель vlc" /siz 480 540
cmdow "udp://239.1.1.4:1234 - медиа-проигрыватель vlc" /mov 481 541

start sts_2
pause
cmdow "udp://239.1.1.2:1234 - медиа-проигрыватель vlc" /siz 480 540
cmdow "udp://239.1.1.2:1234 - медиа-проигрыватель vlc" /mov 961 541
pause
Всем спасибо за помощь!!!!




© OSzone.net 2001-2012