Что нового

Выполнение команды через 3 минуты, полоса прогресса

Deex

Новичок
Сообщения
5
Репутация
1
Версия AutoIt: Version 3.5.4 3.

Описание:
Здравствуйте!

Помогите привязать таймер к полосе прогресса, по истечение которого должна выполниться CMD команда
Код:
Run("shutdown.exe -s -f -t 0")

Спасибо
Код:
#NoTrayIcon

#include <GuiConstantsEx.au3>


GUICreate("Выключение компьютера", 400, 140)
GUISetIcon(@SystemDir & "\shell32.dll", 21)

;Полоса процесса
GUICtrlCreateProgress(20, 70, 360, 10)
GUICtrlSetData(-1, 100)

;Иконка в тексте
GUICtrlCreateIcon("shell32.dll", 16, 20, 20)

;Текст
GUICtrlCreateLabel("Ваш компьютер выключится через 3 минуты, вы может отменить этот процесс", 70, 25, 300, 30)

;Кнопка отмены
Local $idCancel = GUICtrlCreateButton("Отмена", 150, 95, 100, 30)


GUISetState(@SW_SHOW)
While 1
   Switch GUIGetMsg()
	  Sleep (1000)
	  Case $GUI_EVENT_CLOSE, $idCancel
		 ExitLoop



;Run("shutdown.exe -s -f -t 0")

   EndSwitch
WEnd

GUIDelete()
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Deex
Код:
#NoTrayIcon

#include <GuiConstantsEx.au3>


GUICreate("Выключение компьютера", 400, 140)
GUISetIcon(@SystemDir & "\shell32.dll", 21)

;Полоса процесса
$iProgress = GUICtrlCreateProgress(20, 70, 360, 10)
GUICtrlSetData(-1, 100)

;Иконка в тексте
GUICtrlCreateIcon("shell32.dll", 16, 20, 20)

;Текст
GUICtrlCreateLabel("Ваш компьютер выключится через 3 минуты, вы может отменить этот процесс", 70, 25, 300, 30)

;Кнопка отмены
Local $idCancel = GUICtrlCreateButton("Отмена", 150, 95, 100, 30)


GUISetState(@SW_SHOW)
While 1
   Switch GUIGetMsg()
      Sleep (1000)
      Case $GUI_EVENT_CLOSE, $idCancel
         ExitLoop
   EndSwitch
   If GUICtrlRead($idProgressbar1) = 100 Then Run("shutdown.exe -s -f -t 0")
WEnd

GUIDelete()
 
Автор
Deex

Deex

Новичок
Сообщения
5
Репутация
1
Garrett сказал(а):
Deex
Код:
#NoTrayIcon

#include <GuiConstantsEx.au3>


GUICreate("Выключение компьютера", 400, 140)
GUISetIcon(@SystemDir & "\shell32.dll", 21)

;Полоса процесса
$iProgress = GUICtrlCreateProgress(20, 70, 360, 10)
GUICtrlSetData(-1, 100)

;Иконка в тексте
GUICtrlCreateIcon("shell32.dll", 16, 20, 20)

;Текст
GUICtrlCreateLabel("Ваш компьютер выключится через 3 минуты, вы может отменить этот процесс", 70, 25, 300, 30)

;Кнопка отмены
Local $idCancel = GUICtrlCreateButton("Отмена", 150, 95, 100, 30)


GUISetState(@SW_SHOW)
While 1
   Switch GUIGetMsg()
      Sleep (1000)
      Case $GUI_EVENT_CLOSE, $idCancel
         ExitLoop
   EndSwitch
   If GUICtrlRead($idProgressbar1) = 100 Then Run("shutdown.exe -s -f -t 0")
WEnd

GUIDelete()

Скорее всего я не правильно выразился, мне нужно чтобы полоса прогресса заполнилась за 3 минуты и если в течение этих трех минут не была нажата кнопка "Отмена", выполнить команду выключения компьютера
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Deex [?]
мне нужно чтобы полоса прогресса заполнилась за 3 минуты и если в течение этих трех минут не была нажата кнопка "Отмена", выполнить команду выключения компьютера
Код:
#NoTrayIcon
#include <Misc.au3>
#include <WinAPISys.au3>
#include <GuiConstantsEx.au3>
OnAutoItExitRegister("_Exit")

Global $i
Local $hTimerProc = DllCallbackRegister('_TimerProc', 'none', 'hwnd;uint;uint_ptr;dword')
Local $iTimerID = _WinAPI_SetTimer(0, 0, 1800, DllCallbackGetPtr($hTimerProc))

GUICreate("Выключение компьютера", 400, 140)
GUISetIcon(@SystemDir & "\shell32.dll", 21)

;Полоса процесса
$iProgress = GUICtrlCreateProgress(20, 70, 360, 10)

;Иконка в тексте
GUICtrlCreateIcon("shell32.dll", 16, 20, 20)
;Текст
GUICtrlCreateLabel("Ваш компьютер выключится через 3 минуты, вы может отменить этот процесс", 70, 25, 300, 30)
;Кнопка отмены
Local $iButton = GUICtrlCreateButton("Отмена", 150, 95, 100, 30)
GUISetState(@SW_SHOW)

While 1
   Switch GUIGetMsg()
	  Case $GUI_EVENT_CLOSE, $iButton
	  Exit
   EndSwitch
   If (GUICtrlRead($iProgress) = 100) Then ExitLoop
WEnd

GUIDelete()
;Run("shutdown.exe -s -f -t 0")
Run("notepad.exe")

Func _TimerProc($hWnd, $iMsg, $iTimerId, $iTime)
   #forceref $hWnd, $iMsg, $iTimerId, $iTime
   $i += 1
   GUICtrlSetData($iProgress, Ceiling($i))
EndFunc   ;==>_TimerProc

Func _Exit()
   _WinAPI_KillTimer(0, $iTimerID)
   DllCallbackFree($hTimerProc)
EndFunc   ;==>_Exit
 
Автор
Deex

Deex

Новичок
Сообщения
5
Репутация
1
Garrett сказал(а):
Deex [?]
мне нужно чтобы полоса прогресса заполнилась за 3 минуты и если в течение этих трех минут не была нажата кнопка "Отмена", выполнить команду выключения компьютера
Код:
#NoTrayIcon
#include <Misc.au3>
#include <WinAPISys.au3>
#include <GuiConstantsEx.au3>
OnAutoItExitRegister("_Exit")

Global $i
Local $hTimerProc = DllCallbackRegister('_TimerProc', 'none', 'hwnd;uint;uint_ptr;dword')
Local $iTimerID = _WinAPI_SetTimer(0, 0, 1800, DllCallbackGetPtr($hTimerProc))

GUICreate("Выключение компьютера", 400, 140)
GUISetIcon(@SystemDir & "\shell32.dll", 21)

;Полоса процесса
$iProgress = GUICtrlCreateProgress(20, 70, 360, 10)

;Иконка в тексте
GUICtrlCreateIcon("shell32.dll", 16, 20, 20)
;Текст
GUICtrlCreateLabel("Ваш компьютер выключится через 3 минуты, вы может отменить этот процесс", 70, 25, 300, 30)
;Кнопка отмены
Local $iButton = GUICtrlCreateButton("Отмена", 150, 95, 100, 30)
GUISetState(@SW_SHOW)

While 1
   Switch GUIGetMsg()
	  Case $GUI_EVENT_CLOSE, $iButton
	  Exit
   EndSwitch
   If (GUICtrlRead($iProgress) = 100) Then ExitLoop
WEnd

GUIDelete()
;Run("shutdown.exe -s -f -t 0")
Run("notepad.exe")

Func _TimerProc($hWnd, $iMsg, $iTimerId, $iTime)
   #forceref $hWnd, $iMsg, $iTimerId, $iTime
   $i += 1
   GUICtrlSetData($iProgress, Ceiling($i))
EndFunc   ;==>_TimerProc

Func _Exit()
   _WinAPI_KillTimer(0, $iTimerID)
   DllCallbackFree($hTimerProc)
EndFunc   ;==>_Exit

Огромное спасибо!
Скрипт работает :laugh:, но только после компиляции в exe, файл при запуске выдает ошибку
Autoit error - unable to open the script file

Может я не правильно компилирую?


Добавлено:
Сообщение автоматически объединено:

Deex сказал(а):
Garrett сказал(а):
Deex [?]
мне нужно чтобы полоса прогресса заполнилась за 3 минуты и если в течение этих трех минут не была нажата кнопка "Отмена", выполнить команду выключения компьютера
Код:
#NoTrayIcon
#include <Misc.au3>
#include <WinAPISys.au3>
#include <GuiConstantsEx.au3>
OnAutoItExitRegister("_Exit")

Global $i
Local $hTimerProc = DllCallbackRegister('_TimerProc', 'none', 'hwnd;uint;uint_ptr;dword')
Local $iTimerID = _WinAPI_SetTimer(0, 0, 1800, DllCallbackGetPtr($hTimerProc))

GUICreate("Выключение компьютера", 400, 140)
GUISetIcon(@SystemDir & "\shell32.dll", 21)

;Полоса процесса
$iProgress = GUICtrlCreateProgress(20, 70, 360, 10)

;Иконка в тексте
GUICtrlCreateIcon("shell32.dll", 16, 20, 20)
;Текст
GUICtrlCreateLabel("Ваш компьютер выключится через 3 минуты, вы может отменить этот процесс", 70, 25, 300, 30)
;Кнопка отмены
Local $iButton = GUICtrlCreateButton("Отмена", 150, 95, 100, 30)
GUISetState(@SW_SHOW)

While 1
   Switch GUIGetMsg()
	  Case $GUI_EVENT_CLOSE, $iButton
	  Exit
   EndSwitch
   If (GUICtrlRead($iProgress) = 100) Then ExitLoop
WEnd

GUIDelete()
;Run("shutdown.exe -s -f -t 0")
Run("notepad.exe")

Func _TimerProc($hWnd, $iMsg, $iTimerId, $iTime)
   #forceref $hWnd, $iMsg, $iTimerId, $iTime
   $i += 1
   GUICtrlSetData($iProgress, Ceiling($i))
EndFunc   ;==>_TimerProc

Func _Exit()
   _WinAPI_KillTimer(0, $iTimerID)
   DllCallbackFree($hTimerProc)
EndFunc   ;==>_Exit

Огромное спасибо!
Скрипт работает :laugh:, но только после компиляции в exe, файл при запуске выдает ошибку
Autoit error - unable to open the script file

Может я не правильно компилирую?

Нашел в чем причина, если я компилирую скрипт для 32 разрядной системы (x86) и запускаю exe файл под 64 разрядной системой, то появляется ошибка Autoit error - unable to open the script file, если компилирую под x64 то ошибки нет.

Есть решение как сделать универсальный скрипт и под 32 и под 64?
 
Автор
Deex

Deex

Новичок
Сообщения
5
Репутация
1
Здравствуйте!

Возможно ли данный скрипт расположить поверх всех окон?
 
Верх