Что нового

Окна, Диалоги Диалог выключения компьютера через определенное время

Geqsogen

Чайник
Сообщения
24
Репутация
1
Доброго дня.
Задача такая:
- На куче компьютеров при запуске стартует скрипт в фоне, который мониторит время.
- В 20:00 вылезает диалоговое окно поверх всех окон: "Ваш компьютер будет выключен в 20:30. Нажмите 'Отмена' чтобы перенести выключение на 1 час".
- Если нажата ОК или ничего не сделано, то комп выключается в 20:30.
- Если нажата Отмена - повторить диалог в 21:00
- Если три раза переносили выключение, то повторить диалог в 20:00 следующего дня.

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

Буду рад любой помощи - сам пишу скрипты редко, потому трудно каждый раз начинать с нуля.
 

ZaRaki

Новичок
Сообщения
48
Репутация
19
По поводу фона, сами иконку можете спрятать, для этого есть аж 3 способа, выберите удобный для себя.
По поводу всплывающего окна, у msgbox есть несколько параметров, как правило третий это сам выводимый текст, а вот четвёртый параметр - это таймаут через сколько окно убрать автоматически.
В приведённом примере я поставил 20 минут если не было нажато кнопки на окне "ОК" или "Отмена", то автоматически будет выбрано "ОК"
.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

global $mainind = 0

while 1
   sleep(1000)

   if $mainind = 0 Then
      if @hour = 20 And @min => 00 Then
         $arr = msgbox(1+48,"","Ваш компьютер будет выключен в 20:30. Нажмите 'Отмена' чтобы перенести выключение на 1 час", 1200)
         if $arr = 2 Then
            $mainind = 2
         EndIf
         if $arr = -1 Or $arr = 1 then
            $mainind = 1
         EndIf
      EndIf
   EndIf

   if $mainind = 1 Then
      if @hour = 20 And @min => 30 Then
         ExitLoop
         shutdown(21)
      EndIf
   EndIf

   if $mainind = 2 Then
      if @hour = 20 And @min => 30 Then
         $arr = msgbox(1+48,"","Ваш компьютер будет выключен в 21:00. Нажмите 'Отмена' чтобы перенести выключение на 1 час", 1200)
         if $arr = 2 Then
            $mainind = 4
         EndIf
         if $arr = -1 Or $arr = 1 then
            $mainind = 3
         EndIf
      EndIf
   EndIf

   if $mainind = 3 Then
      if @hour = 21 And @min => 00 Then
         ExitLoop
         shutdown(21)
      EndIf
   EndIf

   if $mainind = 4 Then
      if @hour = 21 And @min => 00 Then
         $arr = msgbox(1+48,"","Ваш компьютер будет выключен в 21:30. Нажмите 'Отмена' чтобы перенести выключение на 1 час", 1200)
         if $arr = 2 Then
            $mainind = 6
         EndIf
         if $arr = -1 Or $arr = 1 then
            $mainind = 5
         EndIf
      EndIf
   EndIf

   if $mainind = 5 Then
      if @hour = 21 And @min => 30 Then
         ExitLoop
         shutdown(21)
      EndIf
   EndIf

   if $mainind = 6 Then
      $mainind = 0
      sleep(7200000)
   EndIf
WEnd
 
Автор
G

Geqsogen

Чайник
Сообщения
24
Репутация
1
По поводу фона, сами иконку можете спрятать, для этого есть аж 3 способа, выберите удобный для себя.
По поводу всплывающего окна, у msgbox есть несколько параметров, как правило третий это сам выводимый текст, а вот четвёртый параметр - это таймаут через сколько окно убрать автоматически.
В приведённом примере я поставил 20 минут если не было нажато кнопки на окне "ОК" или "Отмена", то автоматически будет выбрано "ОК"
Отличное решение! Вроде даже все как надо, но пришла мысль что пользователи могут автоматом нажимать ОК, думая что переносят выключение. Решил ваш скрипт под себя доработать, чтобы учесть криворукость пользователей:
- Окно только с кнопкой ОК, и висит полчаса
- Если пользователь закрыл окно сам (ОК или "крестиком"), переносит запрос на час.
- Если окно закрылось само, то выключает.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

global $mainind = 0 ; "1" - перенос на час, "2" - перенос на сутки, "-1" - выключение

while 1
   sleep(1000)

   if $mainind = 0 Then
      if @hour = 20 And @min >= 00 Then
         $arr = msgbox(48 + 4096,"Выключение компьютера!","Ваш компьютер будет выключен в 20:30. Закрытие этого окна перенесет запрос выключения на 1 час", 1800)
         if $arr = 1 Then
            $mainind = 1
         EndIf
         if $arr = -1 Then
            $mainind = -1
         EndIf
      EndIf
   EndIf

   if $mainind = 1 Then
      if @hour = 21 And @min >= 00 Then
         $arr = msgbox(48 + 4096,"Выключение компьютера!","Ваш компьютер будет выключен в 21:30. Закрытие этого окна перенесет запрос на завтра", 1800)
         if $arr = 1 Then
            $mainind = 2
         EndIf
         if $arr = -1 Then
            $mainind = -1
         EndIf
      EndIf
   EndIf

   if $mainind = -1 Then
         shutdown(21)
         ExitLoop
   EndIf

   if $mainind = 2 Then
      $mainind = 0
      sleep(43200000) ; 12 часов
   EndIf
WEnd

Еще раз спасибо!
 
Последнее редактирование:
Верх