Что нового

[Элементы GUI] создание скрипта с запуском через него программ и выводом сообщений о выполнении

Fortress12

Новичок
Добрый вечер.
Нашел на форуме вот этот скрипт
Код:
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>

$hGUI = GUICreate('Example', 200, 150)
$nProgress = GUICtrlCreateProgress(10, 100, 180, 20, $PBS_MARQUEE)
GUICtrlSetState(-1, $GUI_HIDE)
$nLbl = GUICtrlCreateLabel('', 10, 80, 180, 20, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
$nBtn = GUICtrlCreateButton('Click me', 50, 120, 100, 30)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $nBtn
            GUICtrlSetState($nBtn, $GUI_DISABLE)
            GUICtrlSetData($nLbl, 'Ждите...' & @TAB & '0.00 сек')
            GUICtrlSetState($nProgress, $GUI_SHOW)
            GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 1, 50)
            $iTimer = TimerInit()
            $iEnd = Random(10000, 30000, 1)
;~          $iPid = Run('какая-то программа')
;~          While ProcessExists($iPid)
            While TimerDiff($iTimer) < $iEnd
                Sleep(500)
                GUICtrlSetData($nLbl, 'Ждите...' & @TAB & StringFormat('%.2f сек', TimerDiff($iTimer) / 1000))
            WEnd
            GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 0, 0)
            GUICtrlSetState($nProgress, $GUI_HIDE)
            GUICtrlSetData($nLbl, '')
            GUICtrlSetState($nBtn, $GUI_ENABLE)
    EndSwitch
WEnd


Подскажите плиз как его доделать немножко так чтобы в окне над прогрессбаром и надписью ждите в три строки выходило что то типо "выполняю 1" "выполняю 2" "выполняю 3" но не сразу а по мере запуска каждой программы, то есть запустилась прога1 и вылезло окно "выполняю 1" и так далее до 3х)))
Заранее огромное спасибо за потраченное время
 

InnI

AutoIT Гуру
Fortress12
Код:
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>

$hGUI = GUICreate('Example', 200, 150)
$nProgress = GUICtrlCreateProgress(10, 100, 180, 20, $PBS_MARQUEE)
GUICtrlSetState(-1, $GUI_HIDE)
$nLog = GUICtrlCreateLabel('', 10, 10, 180, 20, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
$nLbl = GUICtrlCreateLabel('', 10, 80, 180, 20, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
$nBtn = GUICtrlCreateButton('Click me', 50, 120, 100, 30)
GUISetState()

While 1
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $nBtn
      GUICtrlSetState($nBtn, $GUI_DISABLE)
      GUICtrlSetData($nLbl, 'Ждите...' & @TAB & '0.00 сек')
      GUICtrlSetState($nProgress, $GUI_SHOW)
      GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 1, 50)
      ProgRun('calc.exe', 'Калькулятор')
      ProgRun('notepad.exe', 'Блокнот')
      ProgRun('mspaint.exe', 'Paint')
      ProgRun('cmd.exe', 'Консоль')
      GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 0, 0)
      GUICtrlSetState($nProgress, $GUI_HIDE)
      GUICtrlSetData($nLbl, '')
      GUICtrlSetState($nBtn, $GUI_ENABLE)
  EndSwitch
WEnd

Func ProgRun($FileName, $ProgName)
  Local $iTimer = TimerInit()
  Local $iPid = Run($FileName)
  GUICtrlSetData($nLog, 'Выполняю: ' & $ProgName)
  While ProcessExists($iPid)
    Sleep(500)
    GUICtrlSetData($nLbl, 'Ждите...' & @TAB & StringFormat('%.2f сек', TimerDiff($iTimer) / 1000))
  WEnd
  GUICtrlSetData($nLog, '')
EndFunc
 
Автор
F

Fortress12

Новичок
А возможно ли сделать чтобы прогресс выполнения программ был записан не в одну строку и заменял одну прогу на другую а типо того
-делаю раз
-делаю два
-делаю три
 

InnI

AutoIT Гуру
Fortress12 [?]
не в одну строку
Код:
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>

$hGUI = GUICreate('Example', 200, 150)
$nProgress = GUICtrlCreateProgress(10, 100, 180, 20, $PBS_MARQUEE)
GUICtrlSetState(-1, $GUI_HIDE)
$nLog = GUICtrlCreateEdit('', 10, 10, 180, 60, BitOR($ES_AUTOVSCROLL, $ES_READONLY))
$nLbl = GUICtrlCreateLabel('', 10, 80, 180, 20, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
$nBtn = GUICtrlCreateButton('Click me', 50, 120, 100, 30)
GUISetState()

While 1
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $nBtn
      GUICtrlSetData($nLog, '')
      GUICtrlSetState($nBtn, $GUI_DISABLE)
      GUICtrlSetData($nLbl, 'Ждите...' & @TAB & '0.00 сек')
      GUICtrlSetState($nProgress, $GUI_SHOW)
      GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 1, 50)
      ProgRun('calc.exe', 'Калькулятор')
      ProgRun('notepad.exe', 'Блокнот')
      ProgRun('mspaint.exe', 'Paint')
      ProgRun('cmd.exe', 'Консоль')
      ProgRun('notepad.exe', 'Блокнот')
      ProgRun('calc.exe', 'Калькулятор')
      ProgRun('mspaint.exe', 'Paint')
      GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 0, 0)
      GUICtrlSetState($nProgress, $GUI_HIDE)
      GUICtrlSetData($nLbl, '')
      GUICtrlSetState($nBtn, $GUI_ENABLE)
  EndSwitch
WEnd

Func ProgRun($FileName, $ProgName)
  Local $iTimer = TimerInit()
  Local $iPid = Run($FileName)
  If GUICtrlRead($nLog) Then GUICtrlSetData($nLog, @CRLF, 1)
  GUICtrlSetData($nLog, 'Выполняю: ' & $ProgName, 1)
  While ProcessExists($iPid)
    Sleep(500)
    GUICtrlSetData($nLbl, 'Ждите...' & @TAB & StringFormat('%.2f сек', TimerDiff($iTimer) / 1000))
  WEnd
EndFunc
 
Автор
F

Fortress12

Новичок
Код:
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>

$hGUI = GUICreate('Example', 300, 190)
$nProgress = GUICtrlCreateProgress(60, 100, 180, 20, $PBS_MARQUEE)
GUICtrlSetState(-1, $GUI_HIDE)
$nLog = GUICtrlCreateEdit('', 10, 10, 280, 60, BitOR($ES_AUTOVSCROLL, $ES_READONLY))
$nLbl = GUICtrlCreateLabel('', 10, 80, 280, 20, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
$nBtn = GUICtrlCreateButton('Windows 7', 75, 130, 150, 30)
$nBtn = GUICtrlCreateButton('Windows 8+', 75, 160, 150, 30)
GUISetState()


While 1
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $nBtn
      GUICtrlSetData($nLog, '')
      GUICtrlSetState($nBtn, $GUI_DISABLE)
      GUICtrlSetData($nLbl, 'Ждите...' & @TAB & '0.00 сек')
      GUICtrlSetState($nProgress, $GUI_SHOW)
      GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 1, 75)
      ProgRun('calc.exe', 'Калькулятор')
      ProgRun('notepad.exe', 'Блокнот')
      ProgRun('mspaint.exe', 'Paint')
      GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 0, 0)
      GUICtrlSetState($nProgress, $GUI_HIDE)
      GUICtrlSetData($nLbl, '')
      GUICtrlSetState($nBtn, $GUI_ENABLE)
  EndSwitch
WEnd

Func ProgRun($FileName, $ProgName)
  Local $iTimer = TimerInit()
  Local $iPid = Run($FileName)
  If GUICtrlRead($nLog) Then GUICtrlSetData($nLog, @CRLF, 1)
  GUICtrlSetData($nLog, 'Выполняю: ' & $ProgName, 1)
  While ProcessExists($iPid)
    Sleep(500)
    GUICtrlSetData($nLbl, 'Ждите...' & @TAB & StringFormat('%.2f сек', TimerDiff($iTimer) / 1000))
  WEnd
EndFunc


И пара последних вопросов.
Я добавил еще кнопку и обозвал их Windows 7 и Windows 8+
Как сделать чтобы при нажатии на какую то из них выполнялись три команды? Вобщем чтобы обе запускали что то...
И последний вопрос - какую строчку дописать чтоб при компиляции скрипт иконку подхватил?
 

Spyhunter

Знающий
Код:
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>

$hGUI = GUICreate('Example', 300, 190)
$nProgress = GUICtrlCreateProgress(60, 100, 180, 20, $PBS_MARQUEE)
GUICtrlSetState(-1, $GUI_HIDE)
$nLog = GUICtrlCreateEdit('', 10, 10, 280, 60, BitOR($ES_AUTOVSCROLL, $ES_READONLY))
$nLbl = GUICtrlCreateLabel('', 10, 80, 280, 20, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
$hButton_Win7 = GUICtrlCreateButton('Windows 7', 75, 130, 150, 30)
$hButton_Win8 = GUICtrlCreateButton('Windows 8+', 75, 160, 150, 30)
GUISetState()

While 1
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      ExitLoop
	  
	Case $hButton_Win7
	  
	Case $hButton_Win8

  EndSwitch
WEnd


А иконку можно выбрать при компиляции, прочитай про AutoIt3Wrapper
 

InnI

AutoIT Гуру
Fortress12
Код:
#AutoIt3Wrapper_Icon=D:\AutoIt3\Icons\au3.ico ; путь к иконке

#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>

$hGUI = GUICreate('Example', 300, 190)
$nProgress = GUICtrlCreateProgress(60, 100, 180, 20, $PBS_MARQUEE)
GUICtrlSetState(-1, $GUI_HIDE)
$nLog = GUICtrlCreateEdit('', 10, 10, 280, 60, BitOR($ES_AUTOVSCROLL, $ES_READONLY))
$nLbl = GUICtrlCreateLabel('', 10, 80, 280, 20, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
$nBtn7 = GUICtrlCreateButton('Windows 7', 75, 130, 150, 30)
$nBtn8 = GUICtrlCreateButton('Windows 8+', 75, 160, 150, 30)
GUISetState()

While 1
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $nBtn7
      GUICtrlSetData($nLog, '')
      GUICtrlSetState($nBtn7, $GUI_DISABLE)
      ProgRun('calc.exe', 'Калькулятор')
      ProgRun('notepad.exe', 'Блокнот')
      ProgRun('mspaint.exe', 'Paint')
      GUICtrlSetState($nBtn7, $GUI_ENABLE)
    Case $nBtn8
      GUICtrlSetData($nLog, '')
      GUICtrlSetState($nBtn8, $GUI_DISABLE)
      ProgRun('mspaint.exe', 'Paint')
      ProgRun('notepad.exe', 'Блокнот')
      ProgRun('calc.exe', 'Калькулятор')
      GUICtrlSetState($nBtn8, $GUI_ENABLE)
  EndSwitch
WEnd

Func ProgRun($FileName, $ProgName)
  GUICtrlSetData($nLbl, 'Ждите...' & @TAB & '0.00 сек')
  GUICtrlSetState($nProgress, $GUI_SHOW)
  GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 1, 75)
  Local $iTimer = TimerInit()
  Local $iPid = Run($FileName)
  If GUICtrlRead($nLog) Then GUICtrlSetData($nLog, @CRLF, 1)
  GUICtrlSetData($nLog, 'Выполняю: ' & $ProgName, 1)
  While ProcessExists($iPid)
    Sleep(500)
    GUICtrlSetData($nLbl, 'Ждите...' & @TAB & StringFormat('%.2f сек', TimerDiff($iTimer) / 1000))
  WEnd
  GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 0, 0)
  GUICtrlSetState($nProgress, $GUI_HIDE)
  GUICtrlSetData($nLbl, '')
EndFunc
 
Автор
F

Fortress12

Новичок
А как добавить чтобы вторая программа ожидала оконачания первой до запуска... заменил RunProg на RunWait и не работает....вообще ничего не запускает

и какое словечко добавить и где чтоб по окончанию выполнения скрипта окно закрывалось....дописал в конце exit и закрывается сразу(
 

InnI

AutoIT Гуру
Fortress12 [?]
чтобы вторая программа ожидала оконачания первой
Именно так и работает - пока калькулятор не закроется, блокнот не запустится.

и где чтоб по окончанию выполнения скрипта
Это зависит от того, что вы будете считать "окончанием выполнения".
 
Автор
F

Fortress12

Новичок
Именно так и работает - пока калькулятор не закроется, блокнот не запустится.
Я вношу данные через реестр первой командой через "regedit.exe /s reestr.reg"
Если вносить в реестр через /s то не ждет, а если обычной то ждет.
Возможно ли чтоб и через тихую ждал или внести в скрипт данные реестра? (примерчик киньте плиз я переделаю. пробовал через утилиту reg2exe от SanjaAlone, вроде конвертировал в скрипт, запускаю и ноль эмоций....)

Это зависит от того, что вы будете считать "окончанием выполнения".
Завершение установки последней из программ из списка


P.S. Заранее спасибо за потраченное время
 

InnI

AutoIT Гуру
Fortress12 [?]
Я вношу данные через реестр первой командой через "regedit.exe /s reestr.reg"
Ну а раньше-то чего молчали? :stars:
Третьим параметром функции добавил передачу параметров программы.

Завершение установки последней из программ из списка
Из списка какой кнопки? Добавил в обе - ненужное удалите
Код:
#AutoIt3Wrapper_Icon=D:\AutoIt3\Icons\au3.ico ; путь к иконке

#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>

$hGUI = GUICreate('Example', 300, 190)
$nProgress = GUICtrlCreateProgress(60, 100, 180, 20, $PBS_MARQUEE)
GUICtrlSetState(-1, $GUI_HIDE)
$nLog = GUICtrlCreateEdit('', 10, 10, 280, 60, BitOR($ES_AUTOVSCROLL, $ES_READONLY))
$nLbl = GUICtrlCreateLabel('', 10, 80, 280, 20, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
$nBtn7 = GUICtrlCreateButton('Windows 7', 75, 130, 150, 30)
$nBtn8 = GUICtrlCreateButton('Windows 8+', 75, 160, 150, 30)
GUISetState()

While 1
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $nBtn7
      GUICtrlSetData($nLog, '')
      GUICtrlSetState($nBtn7, $GUI_DISABLE)
      ProgRun('notepad.exe', 'Блокнот', @ScriptName)
      ProgRun('regedit.exe', 'Редактор реестра', '/s reestr.reg')
      ProgRun('calc.exe', 'Калькулятор')
      ProgRun('mspaint.exe', 'Paint')
      GUICtrlSetState($nBtn7, $GUI_ENABLE)
      Exit
    Case $nBtn8
      GUICtrlSetData($nLog, '')
      GUICtrlSetState($nBtn8, $GUI_DISABLE)
      ProgRun('mspaint.exe', 'Paint')
      ProgRun('notepad.exe', 'Блокнот')
      ProgRun('calc.exe', 'Калькулятор')
      GUICtrlSetState($nBtn8, $GUI_ENABLE)
      Exit
  EndSwitch
WEnd

Func ProgRun($FileName, $ProgName,  $Param = "")
  GUICtrlSetData($nLbl, 'Ждите...' & @TAB & '0.00 сек')
  GUICtrlSetState($nProgress, $GUI_SHOW)
  GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 1, 75)
  Local $iTimer = TimerInit()
  Local $iPid = Run($FileName & " " & $Param)
  If GUICtrlRead($nLog) Then GUICtrlSetData($nLog, @CRLF, 1)
  GUICtrlSetData($nLog, 'Выполняю: ' & $ProgName, 1)
  While ProcessExists($iPid)
    Sleep(500)
    GUICtrlSetData($nLbl, 'Ждите...' & @TAB & StringFormat('%.2f сек', TimerDiff($iTimer) / 1000))
  WEnd
  GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 0, 0)
  GUICtrlSetState($nProgress, $GUI_HIDE)
  GUICtrlSetData($nLbl, '')
EndFunc
 
Автор
F

Fortress12

Новичок
Код:
#NoTrayIcon
#Region
#AutoIt3Wrapper_icon=Setup.ico
#EndRegion

#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>

$hGUI = GUICreate('Example', 300, 190)
$nProgress = GUICtrlCreateProgress(60, 100, 180, 20, $PBS_MARQUEE)
GUICtrlSetState(-1, $GUI_HIDE)
$nLog = GUICtrlCreateEdit('', 10, 10, 280, 60, BitOR($ES_AUTOVSCROLL, $ES_READONLY))
$nLbl = GUICtrlCreateLabel('', 10, 80, 280, 20, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
$hButton_Win7 = GUICtrlCreateButton('Windows 7', 75, 130, 150, 30)
$hButton_Win8 = GUICtrlCreateButton('Windows 8+', 75, 160, 150, 30)
GUISetState()


While 1
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      ExitLoop

    Case $hButton_Win7
      GUICtrlSetData($nLog, '')
      GUICtrlSetState($hButton_Win7, $GUI_DISABLE)
      GUICtrlSetData($nLbl, 'Ждите...' & @TAB & '0.00 сек')
      GUICtrlSetState($nProgress, $GUI_SHOW)
      GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 1, 75)
      ProgRun('regedit.exe /s config.reg', 'реестр')
      GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 0, 0)
      GUICtrlSetState($nProgress, $GUI_HIDE)
      GUICtrlSetData($nLbl, '')
      GUICtrlSetState($hButton_Win7, $GUI_ENABLE)
      Exit
    Case $hButton_Win8
      GUICtrlSetData($nLog, '')
      GUICtrlSetState($hButton_Win8, $GUI_DISABLE)
      GUICtrlSetData($nLbl, 'Ждите...' & @TAB & '0.00 сек')
      GUICtrlSetState($nProgress, $GUI_SHOW)
      GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 1, 75)
      ProgRun('regedit.exe /s config.reg', 'реестр')
      ProgRun('ClassicShellSetup.exe /passive', 'классическое меню ПУСК')
      GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 0, 0)
      GUICtrlSetState($nProgress, $GUI_HIDE)
      GUICtrlSetData($nLbl, '')
      GUICtrlSetState($hButton_Win8, $GUI_ENABLE)
      Exit
  EndSwitch
WEnd

Func ProgRun($FileName, $ProgName)
  GUICtrlSetData($nLbl, 'Ждите...' & @TAB & '0.00 сек')
  GUICtrlSetState($nProgress, $GUI_SHOW)
  GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 1, 75)
  Local $iTimer = TimerInit()
  Local $iPid = Run($FileName)
  If GUICtrlRead($nLog) Then GUICtrlSetData($nLog, @CRLF, 1)
  GUICtrlSetData($nLog, 'Выполняю: ' & $ProgName, 1)
  While ProcessExists($iPid)
    Sleep(500)
    GUICtrlSetData($nLbl, 'Ждите...' & @TAB & StringFormat('%.2f сек', TimerDiff($iTimer) / 1000))
  WEnd
  GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 0, 0)
  GUICtrlSetState($nProgress, $GUI_HIDE)
  GUICtrlSetData($nLbl, '')
EndFunc


Вот что у меня до этого было. Может это доменяем а то я уже в переменных запутался немного( Простите....
завершение скрипта добавил из вашего примера к себе.
По поводу реестра - сначала ЕСЛИ ВОЗМОЖНО первой командой должен идти реестр а потом вторая команда, в случае с вин7 это просто реестр без второй или третьей команды
 

InnI

AutoIT Гуру
Fortress12 [?]
или третьей команды
Не вижу я у вас третьей команды. Проверяйте
Код:
#AutoIt3Wrapper_icon=Setup.ico

#RequireAdmin
#NoTrayIcon

#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>

$hGUI = GUICreate('Example', 300, 190)
$nProgress = GUICtrlCreateProgress(60, 100, 180, 20, $PBS_MARQUEE)
GUICtrlSetState(-1, $GUI_HIDE)
$nLog = GUICtrlCreateEdit('', 10, 10, 280, 60, BitOR($ES_AUTOVSCROLL, $ES_READONLY))
$nLbl = GUICtrlCreateLabel('', 10, 80, 280, 20, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
$nBtn7 = GUICtrlCreateButton('Windows 7', 75, 130, 150, 30)
$nBtn8 = GUICtrlCreateButton('Windows 8+', 75, 160, 150, 30)
GUISetState()

While 1
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $nBtn7
      GUICtrlSetData($nLog, '')
      GUICtrlSetState($nBtn7, $GUI_DISABLE)
      ProgRun('regedit.exe', 'реестр', '/s config.reg')
      GUICtrlSetState($nBtn7, $GUI_ENABLE)
      Exit
    Case $nBtn8
      GUICtrlSetData($nLog, '')
      GUICtrlSetState($nBtn8, $GUI_DISABLE)
      ProgRun('regedit.exe', 'реестр', '/s config.reg')
      ProgRun('ClassicShellSetup.exe', 'классическое меню ПУСК', '/passive')
      GUICtrlSetState($nBtn8, $GUI_ENABLE)
      Exit
  EndSwitch
WEnd

Func ProgRun($FileName, $ProgName,  $Param = "")
  GUICtrlSetData($nLbl, 'Ждите...' & @TAB & '0.00 сек')
  GUICtrlSetState($nProgress, $GUI_SHOW)
  GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 1, 75)
  Local $iTimer = TimerInit()
  Local $iPid = Run($FileName & " " & $Param)
  If GUICtrlRead($nLog) Then GUICtrlSetData($nLog, @CRLF, 1)
  GUICtrlSetData($nLog, 'Выполняю: ' & $ProgName, 1)
  While ProcessExists($iPid)
    Sleep(500)
    GUICtrlSetData($nLbl, 'Ждите...' & @TAB & StringFormat('%.2f сек', TimerDiff($iTimer) / 1000))
  WEnd
  GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 0, 0)
  GUICtrlSetState($nProgress, $GUI_HIDE)
  GUICtrlSetData($nLbl, '')
EndFunc
 
Автор
F

Fortress12

Новичок
Спасибо огромное.
ПОдскажите есть смысл завернуть через autoit сам рег файл и classic shell и скрипт в один exe файл или проще через 7z?
 
Автор
F

Fortress12

Новичок
Добрый вечер
Код:
#AutoIt3Wrapper_icon=Setup.ico

#RequireAdmin
#NoTrayIcon

#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>

$hGUI = GUICreate('Example', 300, 190)
$nProgress = GUICtrlCreateProgress(60, 100, 180, 20, $PBS_MARQUEE)
GUICtrlSetState(-1, $GUI_HIDE)
$nLog = GUICtrlCreateEdit('', 10, 10, 280, 60, BitOR($ES_AUTOVSCROLL, $ES_READONLY))
$nLbl = GUICtrlCreateLabel('', 10, 80, 280, 20, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
$nBtn7 = GUICtrlCreateButton('Windows 7', 75, 130, 150, 30)
$nBtn8 = GUICtrlCreateButton('Windows 8+', 75, 160, 150, 30)
GUISetState()

While 1
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $nBtn7
      GUICtrlSetData($nLog, '')
      GUICtrlSetState($nBtn7, $GUI_DISABLE)
      ProgRun('regedit.exe', 'реестр', '/s config.reg')
      GUICtrlSetState($nBtn7, $GUI_ENABLE)
      Exit
    Case $nBtn8
      GUICtrlSetData($nLog, '')
      GUICtrlSetState($nBtn8, $GUI_DISABLE)
      ProgRun('regedit.exe', 'реестр', '/s config.reg')
      ProgRun('ClassicShellSetup.exe', 'классическое меню ПУСК', '/passive')
      GUICtrlSetState($nBtn8, $GUI_ENABLE)
      Exit
  EndSwitch
WEnd

Func ProgRun($FileName, $ProgName,  $Param = "")
  GUICtrlSetData($nLbl, 'Ждите...' & @TAB & '0.00 сек')
  GUICtrlSetState($nProgress, $GUI_SHOW)
  GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 1, 75)
  Local $iTimer = TimerInit()
  Local $iPid = Run($FileName & " " & $Param)
  If GUICtrlRead($nLog) Then GUICtrlSetData($nLog, @CRLF, 1)
  GUICtrlSetData($nLog, 'Выполняю: ' & $ProgName, 1)
  While ProcessExists($iPid)
    Sleep(500)
    GUICtrlSetData($nLbl, 'Ждите...' & @TAB & StringFormat('%.2f сек', TimerDiff($iTimer) / 1000))
  WEnd
  GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 0, 0)
  GUICtrlSetState($nProgress, $GUI_HIDE)
  GUICtrlSetData($nLbl, '')
EndFunc


Возможно ли сюда добавить чекбокс над кнопкой Windows 7?
Поясню
Если поставить галочку в окне с названием "калькулятор", то после нажатия на кнопки ниже (Windows 7 или Windows 8) запустится калькулятор

Заранее спасибо
 

InnI

AutoIT Гуру
Создание
Код:
$nChBox = GUICtrlCreateCheckbox('Название', 10, 70)


Проверка "галочки" и выполнение действий, если установлена
Код:
If BitAND(GUICtrlRead($nChBox), $GUI_CHECKED) Then
        ProgRun('regedit.exe', 'реестр', '/s config.reg')
        ProgRun('ClassicShellSetup.exe', 'классическое меню ПУСК', '/passive')
      EndIf
 
Автор
F

Fortress12

Новичок
Код:
If BitAND(GUICtrlRead($nChBox), $GUI_CHECKED) Then
        ProgRun('regedit.exe', 'реестр', '/s config.reg')
        ProgRun('ClassicShellSetup.exe', 'классическое меню ПУСК', '/passive')
      EndIf


чекбокс выставил сверху а это куда?


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

Разобрался спс)
 

Scampy

Новичок
InnI сказал(а):
Fortress12
Код:
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>

$hGUI = GUICreate('Example', 200, 150)
$nProgress = GUICtrlCreateProgress(10, 100, 180, 20, $PBS_MARQUEE)
GUICtrlSetState(-1, $GUI_HIDE)
$nLog = GUICtrlCreateLabel('', 10, 10, 180, 20, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
$nLbl = GUICtrlCreateLabel('', 10, 80, 180, 20, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
$nBtn = GUICtrlCreateButton('Click me', 50, 120, 100, 30)
GUISetState()

While 1
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $nBtn
      GUICtrlSetState($nBtn, $GUI_DISABLE)
      GUICtrlSetData($nLbl, 'Ждите...' & @TAB & '0.00 сек')
      GUICtrlSetState($nProgress, $GUI_SHOW)
      GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 1, 50)
      ProgRun('calc.exe', 'Калькулятор')
      ProgRun('notepad.exe', 'Блокнот')
      ProgRun('mspaint.exe', 'Paint')
      ProgRun('cmd.exe', 'Консоль')
      GUICtrlSendMsg($nProgress, $PBM_SETMARQUEE, 0, 0)
      GUICtrlSetState($nProgress, $GUI_HIDE)
      GUICtrlSetData($nLbl, '')
      GUICtrlSetState($nBtn, $GUI_ENABLE)
  EndSwitch
WEnd

Func ProgRun($FileName, $ProgName)
  Local $iTimer = TimerInit()
  Local $iPid = Run($FileName)
  GUICtrlSetData($nLog, 'Выполняю: ' & $ProgName)
  While ProcessExists($iPid)
    Sleep(500)
    GUICtrlSetData($nLbl, 'Ждите...' & @TAB & StringFormat('%.2f сек', TimerDiff($iTimer) / 1000))
  WEnd
  GUICtrlSetData($nLog, '')
EndFunc
Привет!
А можно ли применить все вышенаписанyое к Чекбоксам? А не к определенным процессам? Т.е. что выводилось: Выполняется Чекбокс 1 и т.д.
Код:
#include <GUIConstants.au3>
#include <Constants.au3>

$_1 = GUICreate("Установка комплексов", 500, 425, 200, 200)

$Checkbox1 = GUICtrlCreateCheckbox("Комплекс 1", 30, 30, 200, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Комплекс 2", 30, 60, 200, 17)
$Button1 = GUICtrlCreateButton("Установить", 30, 300, 100, 30)

GUISetState(@SW_SHOW)

While 1
    Switch GUIGetMsg()
        Case -3
            Exit
		 Case $Button1
            if GUICtrlRead($Checkbox1) = 1 Then
			   Runwait('prog1.exe')
			   Runwait('prog2.exe')
			   Runwait('prog3.exe')
			EndIf
            if GUICtrlRead($Checkbox2) = 1 Then
			   Runwait('prog4.exe')
			   Runwait('prog5.exe')
			   Runwait('prog6.exe')
			EndIf
      EndSwitch
   WEnd
 
Верх