Что нового

Перезапуск приложения при простое ввода

MadFroZt

Новичок
Сообщения
5
Репутация
0
Доброго времени суток!
У меня появилась необходимость перезапускать приложение (например браузер) про простое (читай, отсутствии ввода) >5 минут, и который после перзапуска должен открываться в полноэкранном режиме (имитировать нажатие F11).
Не подскажите чайнику, как это можно сделать? :greeting:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Как то так:
AutoIt код:
#include <WinAPISys.au3>

HotKeySet('{ESC}', '_Exit')

Global $sApp_Title = '[CLASS:Chrome_WidgetWin_1;REGEXPTITLE:^.* - Google Chrome$]'
Global $sApp_Path = @ProgramFilesDir & '\Google\Chrome\Application\Chrome.exe'
Global $iIdle = 5 ;Minutes

While 1
    If _WinAPI_GetIdleTime() >= $iIdle * 1000 * 60 Then
        MouseMove(MouseGetPos(0) + 1, MouseGetPos(1), 0)
        MouseMove(MouseGetPos(0) - 1, MouseGetPos(1), 0)
        
        WinClose($sApp_Title)
        Run($sApp_Path)
        
        WinWait($sApp_Title, '', 5)
        WinActivate($sApp_Title)
        
        Send('{F11}')
    EndIf
WEnd

Func _Exit()
    Exit
EndFunc
 
Автор
M

MadFroZt

Новичок
Сообщения
5
Репутация
0
Спасибо за подсказку!
Однако у меня не хром, а Опера (будь она не ладна). Также, требуется однократный запуск Денвера, ожидание запуска всех процедур от него (СМТП, Апач). И уже затем только запуск оперы. Я вот тут накидал свой код поверх вашего. Можете посмотреть, что не так?
AutoIt код:
#include <WinAPISys.au3>

HotKeySet('{ESC}', '_Exit')

Global $sApp_Title = '[CLASS:Chrome_WidgetWin_1;REGEXPTITLE: test1.ru\*.html$]'

Global $sApp_Path = @AppDataDir & 'Local\Programs\Opera\launcher.exe'
Global $sDenwer_Path = @DesktopDir & 'Тачпанель Алиса\WebServers\denwer\run.exe'
Global $iIdle = 5 ; Minutes
Global $Sleep_Time = 60 ; Seconds

   Run ($sDenwer_Path)
   Sleep (60000)
   Run ($sApp_Path)
   WinWait($sApp_Title, '', 5)
   WinActivate($sApp_Title)
   Send ('{F11}')
While 1
    If _WinAPI_GetIdleTime() >= $iIdle * 1000 * 60 Then
        MouseMove(MouseGetPos(0) + 1, MouseGetPos(1), 0)
        MouseMove(MouseGetPos(0) - 1, MouseGetPos(1), 0)

        WinClose($sApp_Title)
        Run($sApp_Path)

        WinWait($sApp_Title, '', 5)
        WinActivate($sApp_Title)

        Send('{F11}')
    EndIf
WEnd

Func _Exit()
    Exit
EndFunc
 
Последнее редактирование:

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Можете посмотреть, что не так?
Всё.
Нужно заменить заголовок на тот что у оперы (класс окна и сам заголовок), также пути неверные, после макроса нужен слэш.
По поводу запуска денвера, чтобы ожидать его полной загрузки нужно отслеживать окно или то что указывает на полную загрузку.
 
Автор
M

MadFroZt

Новичок
Сообщения
5
Репутация
0
Всё.
Нужно заменить заголовок на тот что у оперы (класс окна и сам заголовок), также пути неверные, после макроса нужен слэш.
По поводу запуска денвера, чтобы ожидать его полной загрузки нужно отслеживать окно или то что указывает на полную загрузку.
Ну, по поводу класса - он такой же (Chrome_WidgetWin_1). Заголовки я уже поменял. Меня только смущает часть REGEXPTITLE: ^.* что значит ^.* в конце? Принимать любые имена заголовка?
К тому же, даже с вашего скрипта не всегда закрывался хром, из-за чего скапливалось 100500 окон.

Я немного подправил код
AutoIt код:
#include <WinAPISys.au3>
#include <WinAPIShPath.au3>
#include <WinAPIConstants.au3>

HotKeySet('{ESC}', '_Exit')

Global $sApp_Title = '[CLASS:Chrome_WidgetWin_1;REGEXPTITLE:*.* - Opera$]'
Global $sApp_Path = @AppDataCommonDir & 'Local\Programs\Opera\launcher.exe'
Global $sDenwer_Path = @DesktopCommonDir & 'Alice\WebServers\denwer\run.exe'
Global $iIdle = 5 ; Minutes
Global $Sleep_Time = 60 ; Seconds


   Run ($sApp_Path)
   WinWait($sApp_Title, '', 5)
   WinActivate($sApp_Title)
   WinWaitActive ($sApp_Title,' "Давай пораскрашиваем" ', 30)
   Send ('{F11}')
Func _Exit ()
   Exit
   EndFunc
 
Последнее редактирование:
Автор
M

MadFroZt

Новичок
Сообщения
5
Репутация
0
Я вроде разобрался с классами и заголовками окон, а также с путями к программам. Все вроде запускается. Однако, после отсчёта бездействия опера закрывается... и всё. Перезапуска не происходит. В чём может быть проблема?

AutoIt код:
#include <WinAPISys.au3>


HotKeySet('{ESC}', '_Exit')

Global $sOpera_Title = '[CLASS:Chrome_WidgetWin_1;REGEXPTITLE:^.* - Opera$]'
Global $sOpera_Path = @LocalAppDataDir & '\Programs\Opera\launcher.exe'
Global $sDenwer_Title = '[CLASS:ConsoleWindowClass;REGEXPTITLE:..\..\usr\local\miniperl\miniperl.exe Control.pl start]'
Global $sDenwer_Path = @DesktopDir & '\Alice\WebServers\denwer\run.exe'
Global $sApache_Title = '[CLASS:ConsoleWindowClass;REGEXPTITLE: httpd.exe -w]'
Global $sSMTP_Title = '[CLASS:ConsoleWindowClass; REGEXPTITLE: ..\..\..\usr\local\miniperl\miniperl sendmail_daemon.pl]'
Global $iIdle = 0.5; Minutes
Global $Sleep_Time = 30 ; Seconds

   Run ($sDenwer_Path)
   WinWaitClose ($sDenwer_Title,'')
   Run ($sOpera_Path)
   WinWait($sOpera_Title,'')
   WinActivate($sOpera_Title)
   WinWaitActive ($sOpera_Title,'')
   Send ('{F11}')
While 1
    If _WinAPI_GetIdleTime() >= $iIdle * 1000 * 60 Then
        MouseMove(MouseGetPos(0) + 1, MouseGetPos(1), 0)
        MouseMove(MouseGetPos(0) - 1, MouseGetPos(1), 0)

        WinClose($sOpera_Title)
        Run ($sOpera_Path)
        WinWait($sOpera_Title, '')
         WinActivate($sOpera_Title)
        WinWaitActive ($sOpera_Title,'')
         Send('{F11}')
    EndIf
WEnd

Func _Exit()
    Exit
EndFunc
 
Последнее редактирование:

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Автор
M

MadFroZt

Новичок
Сообщения
5
Репутация
0
Это рег. выражение.
Ну я то понял, просто что конкретно оно означает?
Путь верный? у меня там внутри ещё папка Common.
В общем, я просто разбил скрипт на две части, и все заработало. Ну и еще пару косяков подправил.
AutoIt код:
#include <WinAPISys.au3>

Func _Exit()
    Exit
EndFunc

HotKeySet('{ESC}', '_Exit')

Global $sOpera_Title = '[CLASS:Chrome_WidgetWin_1;REGEXPTITLE:^.* - Opera$]'
Global $sOpera_Path = @LocalAppDataDir & '\Programs\Opera\launcher.exe'
Global $sDenwer_Title = '[CLASS:ConsoleWindowClass;REGEXPTITLE:..\..\usr\local\miniperl\miniperl.exe Control.pl start]'
Global $sDenwer_Path = @DesktopDir & '\Alice\WebServers\denwer\run.exe'
Global $sApache_Title = '[CLASS:ConsoleWindowClass;REGEXPTITLE: httpd.exe -w]'
Global $sSMTP_Title = '[CLASS:ConsoleWindowClass; REGEXPTITLE: ..\..\..\usr\local\miniperl\miniperl sendmail_daemon.pl]'
Global $iIdle = 0.2; Minutes
Global $Sleep_Time = 30 ; Seconds

   Run ($sDenwer_Path)
   WinWaitClose ($sDenwer_Title,'')
   Run ($sOpera_Path)
   WinWait($sOpera_Title,'')
   WinActivate($sOpera_Title)
   WinWaitActive ($sOpera_Title,'')
   Send ('{F11}')
AutoIt код:
#include <WinAPISys.au3>

Func _Exit()
    Exit
EndFunc

HotKeySet('{ESC}', '_Exit')

Global $sOpera_Title = '[CLASS:Chrome_WidgetWin_1;REGEXPTITLE:^.* - Opera$]'
Global $sOpera_Path = @LocalAppDataDir & '\Programs\Opera\launcher.exe'
Global $sDenwer_Title = '[CLASS:ConsoleWindowClass;REGEXPTITLE:..\..\usr\local\miniperl\miniperl.exe Control.pl start]'
Global $sDenwer_Path = @DesktopDir & '\Alice\WebServers\denwer\run.exe'
Global $sApache_Title = '[CLASS:ConsoleWindowClass;REGEXPTITLE: httpd.exe -w]'
Global $sSMTP_Title = '[CLASS:ConsoleWindowClass; REGEXPTITLE: ..\..\..\usr\local\miniperl\miniperl sendmail_daemon.pl]'
Global $iIdle = 5; Minutes
Global $Sleep_Time = 30 ; Seconds


While 1
    If _WinAPI_GetIdleTime() >= $iIdle * 1000 * 60 Then
        MouseMove(MouseGetPos(0) + 1, MouseGetPos(1), 0)
        MouseMove(MouseGetPos(0) - 1, MouseGetPos(1), 0)

        WinClose($sOpera_Title,'')
        Sleep (5000)
        Run ($sOpera_Path,'')
        WinWait($sOpera_Title,'')
        WinActivate($sOpera_Title)
        WinWaitActive ($sOpera_Title,'')
        Send ('{F11}')
    EndIf
WEnd

Теперь другая проблема - "планировщик заданий шиндоус" почему-то не хочет запускать .exeшники скриптов.
 
Верх