Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] управление окнами из командной строки (http://forum.oszone.net/showthread.php?t=234717)

iron86 15-05-2012 19:57 1916536

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

Iska 15-05-2012 22:42 1916630

iron86, пакетные файлы не поддерживают работу с окнами. Используйте сторонние средства для манипулирования окном приложения после запуска, например NirCmd - Windows command line tool, либо переходите на PowerShell.

iron86 16-05-2012 00:29 1916671

Цитата:

Цитата Iska
либо переходите на PowerShel »

это вариант, только не сталкивался еще
там можно сохранять в файлы типа bat?
если да, то какой командой можно реализовать задуманное?

Iska 16-05-2012 03:23 1916723

Цитата:

Цитата iron86
там можно сохранять в файлы типа bat? »

Поясните Ваш вопрос.

Цитата:

Цитата iron86
если да, то какой командой можно реализовать задуманное? »

Например, так (на основе Win32 API из PowerShell 1.0 « PowerShell и другие скрипты):
читать дальше »
Код:

# Создаём объект 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 1916743

на калькулятор почему-то не действует

sewell 16-05-2012 11:36 1916901

iron86, вот на этом сайте найдете нужные Вам утилиты для данной задачи.

Iska 16-05-2012 17:42 1917126

sewell, вместо кучи утилит достаточно одного NirCmd, о котором было упомянуто выше.

iron86 16-05-2012 18:10 1917152

Цитата:

Цитата Iska
Поясните Ваш вопрос. »

последовательность команд командной строки можно сохранить в исполнительный файл bat, запустив который выполняются команды
можно ли сделать тоже самое в пауер шел?

Iska 16-05-2012 19:44 1917214

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

iron86 07-06-2012 02:04 1929770

попробовал NirCmd, действительно прикольная штука, но нужных мне команд не нашел
подскажите, кто хорошо знает

Iska 07-06-2012 04:17 1929801

Например, команды exec и win.

iron86 11-06-2012 15:24 1932332

Цитата:

Цитата Iska
Например, команды exec и win. »

мне нужно именно задать координаты на мониторе например 0х100, а не минимизировать, максимизировать и скрыть

iron86 11-06-2012 15:41 1932341

с помощью cmdow делаю так:
Код:

start file1
start file2
start file3
start file4
cmdow /th

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

ferget 11-06-2012 15:47 1932345

параметр /mov left top

Iska 11-06-2012 17:17 1932410

Цитата:

Цитата iron86
мне нужно именно задать координаты на мониторе например 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 1932434

Цитата:

Цитата Iska
Iska »

простите, я от этого отказался, использую cmdow

Цитата:

Цитата ferget
параметр /mov left top »

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

дескриптор всех окон, которые есть в панели задач получаю так:
Код:

C:\>cmdow /t /p
размер окна и его положение задаю так:
Код:

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

iron86 12-06-2012 10:32 1932751

Разобрался!
Сделал так:
Код:

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

Всем спасибо за помощь!!!!


Время: 22:06.

Время: 22:06.
© OSzone.net 2001-