[ОТВЕТИТЬ]
Опции темы
17.08.2007 15:50  
Sergo
Извиняюсь за своего коллегу, который не выложил скрипт, он действительно не программист.
Скачайте прогу AutoHotkey.
Скрипт советую протестить, т.к. он по разному работает на разных машинах. Пишется в обычном блокноте, расширение *.ahk.
Удачи.
Пример:

Pause_Sleep := 1000
SetControlDelay, 1000 ; задержка для команд control
run, SMAdmin.exe, C:\SM2000\Bin\, UseErrorLevel, idSM
if ErrorLevel = ERROR
Exit
Sleep, Pause_Sleep

Send, +{Tab}
If %0% = 0
{
Send, supermag ; пользователь
Send, {Tab}
Send, 234 ; пароль
Pause_sec:=15 ; задержка по умолчанию
}
else
{ ; командная строка
Send, %1% ; пользователь
Send, {Tab}
Send, %2% ; пароль
Pause_sec:=%3% ; задержка на выполнение расчетов в сек.
}
Send, {Enter}
Sleep, Pause_Sleep

IfWinExist, Сообщение об ошибке
{
Sleep, Pause_Sleep
WinClose, ahk_pid %idSM%
Sleep, Pause_Sleep
WinClose, ahk_pid %idSM%
exit
}
Sleep, Pause_Sleep

; аналитика
Send, {Down 2}
sleep, Pause_Sleep

; товародвижение
Send, {Tab}
Sleep, Pause_Sleep
Send, +{Right}
Sleep, Pause_Sleep
sleep, Pause_Sleep

; Очистка базы
Send, {Tab 6}
Sleep, Pause_Sleep
Send, {Enter}
sleep, Pause_Sleep

Send, {Down} ; Полная
Sleep, Pause_Sleep

Send, {Enter} ; Ок
Sleep, Pause_Sleep

Send, {Left} ; Полная очистка базы
Sleep, Pause_Sleep

Send, {Enter} ; Ок

Sleep, Pause_Sleep

WinWait, Административный модуль, Очистка базы данных завершена., Pause_sec
if ErrorLevel
{
MsgBox, 0, , Ошибка очистки базы, 3
loop
{
IfWinNotExist, Административный модуль, Завершить работу с программой?
WinClose, ahk_pid %idSM%
else
{
Send, {Enter}
break
}
Sleep, Pause_Sleep
}
exit
}
Sleep, Pause_Sleep


Send, {Enter} ; Ок
Sleep, Pause_Sleep

; перенести
Send, +{Tab 4}
Send, {Enter} ; Ок
sleep, Pause_Sleep

Send, {Enter} ; Ок
sleep, Pause_Sleep
IfWinExist, Административный модуль, Время, по которое
{
Send, {Enter} ; Ок
sleep, Pause_Sleep
}

IfWinExist, Сообщение об ошибке
{
loop
{
IfWinNotExist, Административный модуль, Завершить работу с программой?
Send, {ALTDOWN}{F4}{ALTUP}
else
{
Send, {Enter}
exit
}
Sleep, Pause_Sleep
}
}


sleep, Pause_Sleep

WinWait, Административный модуль, Перенос выполнен успешно., Pause_sec
if ErrorLevel
{
MsgBox, 0, , Ошибка переноса , 3
loop
{
IfWinNotExist, Административный модуль, Завершить работу с программой?
WinClose, ahk_pid %idSM%
else
{
Send, {Enter}
break
}
Sleep, Pause_Sleep
}
exit
}
sleep, Pause_Sleep

Send, {Enter} ; Ок

; рассчитать
send, {Tab}
send, {Enter}
sleep, Pause_Sleep*2

Send, {Enter} ; Ок

sleep, Pause_Sleep

WinWait, Административный модуль, Расчет завершен успешно., Pause_sec
if ErrorLevel
{
MsgBox, 0, , Ошибка расчета аналитики, 3
; закрыть все окна
loop
{
IfWinNotExist, Административный модуль, Завершить работу с программой?
WinClose, ahk_pid %idSM%
else
{
Send, {Enter}
break
}
Sleep, Pause_Sleep
}
exit
}

Sleep, Pause_Sleep
Send, {Enter}
Sleep, Pause_Sleep

; закрыть все окна
loop
{
IfWinNotExist, Административный модуль, Завершить работу с программой?
Send, {ALTDOWN}{F4}{ALTUP}
else
{
Send, {Enter}
exit
}
Sleep, Pause_Sleep
}
 
12.02.2009 05:20  
anderson
Я попроще сделал:

;Запускаем административный модуль супермага
run, SMAdmin.exe, C:\SM2000\Bin\, UseErrorLevel

;Вводим пароль и эмулируем дальнейшие нажатия
WinWaitActive, Подключение к рабочей базе. Введите имя и пароль., &База данных
Send, qqq{ENTER}{DOWN}{DOWN}{TAB}{RIGHT}{TAB}{TAB}{RIGHT}{RIGHT}{ENTER}{TAB}{TAB}{TAB}{ENTER}

Это с условием, что заранее выставлены галочки: выполнить перенос, расчет и радиокнопка "Запустить сейчас".
Конечно можно потом убивать процесс после таймаута, но суть не в этом.
Все это работает при условии разблокированного рабочего стола сервера. Может быть есть какие-то решения по автоматической разблокировке (Ctrl+Alt+Del, потом ввод пароля и Enter, после чего уже будет работать скрипт). Windows не поддерживает эмуляцию нажатия сочетания Ctrl+Alt+Del, поэтому в autohk запихать это нельзя.
 
12.02.2009 06:46  
anderson
В общем программных решений никаких не нашел (только если в msgina.dll лезть и самому кодить).
Нашел другое решение:
Делаем файл server.rdp для подключения к серверу по TS (сохраняем в нем пароль подключения), делаем ярлык или 123.cmd-файл:
mstsc.exe server.rdp /console
Запускаем задание (например на другом сервере) в нужное время (например в 0:00) выполнить 123.cmd, а на сервере бд уже в 0:01 запускать скрипт autohk. (ну и естественно нужно стопорить\запускать Кассовый модуль супермага).
 
12.02.2009 08:36  
OlegON
С rdp вариант работает? Просто в сеансе сообщения нажатий клавиш куда-то мимо пролетают...
 
13.02.2009 06:39  
anderson
С RDP работает - сегодня утром пришел - все рассчиталось (да в принципе я и вчера проверял, поэтому уверен был), осталось дошлифовать, чтоб окно супермага закрывалось и tsclient тоже, но самое главное сделано.
Че за "сеанс сообщения" никак не могу понять?
 
20.02.2009 07:43  
akonev
Цитата:
Сообщение от anderson
Че за "сеанс сообщения" никак не могу понять?
системные сообщения в RDP-сеансе
 
 
Опции темы



Часовой пояс GMT +3, время: 05:55.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.