Войти

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


paulkorotoon
18-09-2009, 19:53
:) Здравствуйте. Такой вопрос: на каком языке можно написать скрипт, при выполнении которого запускалась бы определенная программа и ее окно занимало бы на рабочем столе определенное положение?

amel27
20-09-2009, 15:29
Paul-SFL, на скриптовых языках, подерживающих WinAPI (VBA, AutoIT, AutoHotKey и т.д.), либо имеющих специализированный инструментарий по управлению окнами (AutoIT, AutoHotKey), либо на CMD через специализированные утилиты типа CMDOW (http://www.commandline.co.uk/cmdow/#params), пример:
@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
amel27, спасибо :) . Попробую через CMDOW..

paulkorotoon
22-09-2009, 18:32
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
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
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
Это через 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] — очень помогает отслеживать порядок вызова/исполнения приложений в рамках пакетного файла, возможные неточности при передаче параметров, потерянные/лишние кавычки и т.п.

P.S. Я еще, прочитав help по cmdow, так писал…
Paul-SFL, судя по описанию"]…
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
Спасибо всем. Сейчас нет ни времени, ни особой потребности этим заниматься, но на будущее непременно учту все советы.




© OSzone.net 2001-2012