Компьютерный форум 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=150887)

paulkorotoon 18-09-2009 19:53 1222028

Фиксированное положение окна программы при ее запуске
 
:) Здравствуйте. Такой вопрос: на каком языке можно написать скрипт, при выполнении которого запускалась бы определенная программа и ее окно занимало бы на рабочем столе определенное положение?

amel27 20-09-2009 15:29 1223266

Paul-SFL, на скриптовых языках, подерживающих WinAPI (VBA, AutoIT, AutoHotKey и т.д.), либо имеющих специализированный инструментарий по управлению окнами (AutoIT, AutoHotKey), либо на CMD через специализированные утилиты типа CMDOW, пример:
Код:

@Echo Off

Set $Left=0
Set $Top=0
Set $Width=200
Set $Hight=200

notepad "%~nx0"
cmdow "%~nx0 - Блокнот" /MOV %$Left% %$Top% /SIZ %$Width% %$Hight%


paulkorotoon 20-09-2009 15:38 1223268

amel27, спасибо :) . Попробую через CMDOW..

paulkorotoon 22-09-2009 18:32 1224917

amel27, а помочь можешь немного :) ? Я в скриптах ноль просто.. Скопировал CMDOW в system32, сама программа работает. Вот скрипт, который ты примером привел - не работает (запускал из командной строки). Сначала блокнот предлагает создать файл "%~nx0", после второй попытки уже его открывает, но размер окна не меняется.
Я написал такое:
Код:

@Echo Off

Set $Left=0
Set $Top=0
Set $Width=1000
Set $Hight=700

F:\Setups\Sysinternals\Autoruns\autoruns.exe
cmdow "(здесь, как я понял, надо писать имя окна
 в hexadecimal format, но как это сделать -
не знаю)" /SIZ %$Width% %$Hight%

Autoruns запускается, с размером - пока парюсь. Косячу ли я где-то?

Iska 22-09-2009 20:51 1225024

Paul-SFL, а не проще ли Вам будет использовать:
Код:

"C:\Program Files\CMDOW\cmdow.exe" /run /max "C:\Program Files\Autoruns\autoruns.exe"
или даже:
Код:

start "" /max "C:\Program Files\Autoruns\autoruns.exe"
С «cmdow.exe» работать не очень удобно в том смысле, что она не работает с классами окон, потому сам я предпочитаю «nircmd.exe»/«nircmdc.exe». Тем не менее, можно попробовать сделать, например, так:
Код:

@echo off

setlocal enableextensions enabledelayedexpansion

set /a Left  = 100
set /a Top    = 100
set /a Width  = 400
set /a Height = 600

set strCMDOW=%ProgramFiles%\CMDOW\cmdow.exe
set strTitle=Autoruns [%USERDOMAIN%\%USERNAME%] - Sysinternals: www.sysinternals.com

start "" "%ProgramFiles%\Autoruns\autoruns.exe"
:Wait
        ping -n 2 localhost >nul
        "%strCMDOW%" "%strTitle%" 1>nul 2>nul
if errorlevel 1 goto :Wait

"%strCMDOW%" "%strTitle%" /MOV %Left% %Top% /SIZ %Width% %Height%

endlocal
exit /b 0

Замечания:
  • Я не очень понял почему, но «autoruns.exe» ведёт себя как консольное приложение (ранее я в пакетных файлах работал только с «autorunsc.exe»); потому — «start …».
  • Заголовок окна «autoruns.exe» содержит «Домен\Пользователь»; добавляем их посредством переменных окружения.
  • Цикл ожидания нужен для того, чтобы приложение «autoruns.exe» гарантированно успело создать окно; проверяется сие обычным образом, через опрос окон посредством самой утилиты «cmdow.exe» и проверку кода возврата, который она поддерживает.

paulkorotoon 22-09-2009 21:54 1225063

Iska, только давай на "ты" :) . Спасибо за советы :) , но я, признаться, не слишком понимаю.
Цитата:

Цитата Iska
Тем не менее, можно попробовать сделать, например, так »

Это через CMDOW, да? Или через Nircmd?
P.S. Я еще, прочитав help по cmdow, так писал:
Код:

cmdow /run F:/Setups/Sysinternals/Autoruns/autoruns.exe window (опять же, не знаю, как имя окна записать) /siz 1000 700
- бред полный :) , да?

Iska 23-09-2009 02:32 1225194

Цитата:

Цитата Paul-SFL
Это через CMDOW, да? Или через Nircmd?

Через «cmdow.exe»,
читать дальше »
смотрите выше:
Цитата:

Код:


set strCMDOW=%ProgramFiles%\CMDOW\cmdow.exe
        …
        "%strCMDOW%" "%strTitle%" 1>nul 2>nul

"%strCMDOW%" "%strTitle%" /MOV %Left% %Top% /SIZ %Width% %Height%


В переменной «strCMDOW» указываем путь к исполняемому файлу «cmdow.exe». У меня он такой: «c:\Program Files\CMDOW\cmdow.exe», потому пишем «%ProgramFiles%\CMDOW\cmdow.exe»; Вы, естественно, указываете свой (если, конечно, «cmdow.exe» не лежит в одном из каталогов, перечисленных в PATH).

В переменной «strTitle» указываем заголовок окна «autoruns.exe». У меня версия 9.41; при её запуске я вижу в заголовке окна такой текст: «Autoruns [ДоменXXX\ПользовательXXX] - Sysinternals: www.sysinternals.com», потому вместо «ДоменXXX» подставляем переменную окружения «USERDOMAIN», а вместо «ПользовательXXX», соответственно, — «USERNAME». В итоге получаем следующую конструкцию:
Код:

set strTitle=Autoruns [%USERDOMAIN%\%USERNAME%] - Sysinternals: www.sysinternals.com
Переменные «strCMDOW» и «strTitle» используются ниже, например:
Код:

"%strCMDOW%" "%strTitle%" 1>nul 2>nul
разворачивается при исполнении в нечто наподобие:
Код:

"c:\Program Files\CMDOW\cmdow.exe" "Autoruns [MyDomain\Pupkin] - Sysinternals: www.sysinternals.com" 1>nul 2>nul

Если что-то непонятно, спрашивайте, но лучше конкретными вопросами. Можете для начала закомментировать «@echo off», убрать «…>nul» и посмотреть, как это работает. Также весьма рекомендую Process Monitor от того же автора [подразумевается Autoruns — Iska] — очень помогает отслеживать порядок вызова/исполнения приложений в рамках пакетного файла, возможные неточности при передаче параметров, потерянные/лишние кавычки и т.п.

Цитата:

Цитата Paul-SFL
P.S. Я еще, прочитав help по cmdow, так писал…

Paul-SFL, судя по описанию
читать дальше »
Цитата:

Цитата CMDOW Commandline Window Utility [v1.4.3]

Usage 4. This form of CMDOW executes the specified file or opens it using the the application associated with the filename extension.

CMDOW /RUN [state] file [args]

/RUN : Executes the specified file if possible, otherwise opens it using the the application associated with the filename extension.
state : Requests how the applications window is initially displayed. Use /MIN for minimized, /MAX for maximized and /HID for hidden. If omitted the application is started in its default show state. Some applications ignore this, use CMDOW to alter the window state after the application has started.
file : File to execute/open. Use double quotes if filename contains spaces.
args : Optional arguments passed on to the application. Specify any args exactly as you would if executing/opening the file directly.

и по:
Код:

cmdow.exe /?
такая форма командной строки утилитой не поддерживается.

paulkorotoon 15-10-2009 00:22 1243302

Спасибо всем. Сейчас нет ни времени, ни особой потребности этим заниматься, но на будущее непременно учту все советы.


Время: 11:56.

Время: 11:56.
© OSzone.net 2001-