Что нового

создать окно с полем ввода для чисел

seed6

Новичок
Сообщения
14
Репутация
0
Суть в том,что есть скрипт, который открывает блокнот и вставляет туда несколько чисел и через какое то время закрывает блокнот.. Сложность для меня в том, что цифры и время ожидания каждый раз разные, и каждый раз приходится редактировать скрипт. Поэтому надо как то сделать так, что бы при запуске скрипта появлялось окно с полем ввода для цифр и времени и кнопкой ок для продолжения работы скрипта. Помогите пожалуйста.
 

Вложения

  • проект1.au3
    1.5 КБ · Просмотры: 3

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
в коде блокнот запускается три раза. сколько раз вообще нужно запускать?
если несколько, то окно с вводом цифр должно появляться каждый раз перед запуском блокнота?
Сообщение автоматически объединено:

Код:
Local $hGui = GUICreate('', 350, 100)
Local $iInputSend = GUICtrlCreateInput('', 10, 10, 300, 25, 0x2000);только цифры
Local $iInputSleep = GUICtrlCreateInput('', 10, 35, 300, 25, 0x2000); только цифры
Local $iButton = GUICtrlCreateButton('OK', 10, 70, 70)
GUISetState()
Global $sRSend, $sRSleep
While 1
    Switch GUIGetMsg()
        Case -3
            Exit
        Case $iButton
            $sRSend = GUICtrlRead($iInputSend)
            $sRSleep = GUICtrlRead($iInputSleep)
            If Not $sRSend And Not $sRSleep Then Exit
            GUIDelete()
            _RunNot()
            Exit
    EndSwitch
WEnd

Func _RunNot()
    Run("notepad.exe")
    WinWaitActive("[class:Notepad]")
    Send($sRSend)
    Sleep($sRSleep)
    WinClose("[class:Notepad]")
    ControlClick("[class:#32770]", "", "[CLASS:Button; INSTANCE:2]")
EndFunc   ;==>_RunNot
 
Последнее редактирование:
Автор
S

seed6

Новичок
Сообщения
14
Репутация
0
Окно с полями ввода запускается только один раз при запуске скрипта, далее скрипт запускает по очереди три раза подряд блокнот, вставляет каждый раз цифры из полей. и если можно так сделать, после окончания скрипта надо зациклить начиная с запуска первого блокнота и так далее до бесконечности. поможешь, отблагодарю$
 

Вложения

  • IMG_20200406_185413_813.jpg
    IMG_20200406_185413_813.jpg
    1,014.3 КБ · Просмотры: 6

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
то есть, нужно чтобы один раз появилось окно, ввели цифры, потом ОК, и далее в цикле открывался блокнот?
или
появляется окно, вводим цифры, жмем ОК, три раза запускается блокнот. потом опять появляется окно, вводим цифры, жмем ОК, три раза запускается блокнот и все эти стадии ставим в бесконечный повтор?
 
Автор
S

seed6

Новичок
Сообщения
14
Репутация
0
нужно чтобы один раз появилось окно, ввели цифры, потом ОК, и далее в цикле открывался блокнот, когда цикл с тремя блокнотами заканчивается, снова запускается цикл с блакнотами и вводятся те же цифры и так до тех пор, пока не закрою скрипт.
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
пример ко второму условию
Код:
Global $sRSend, $sRSleep

While 1
    _GuiNote()
WEnd


Func _GuiNote()
    Local $hGui = GUICreate('Send & Sleep', 320, 100)
    Local $iInputSend = GUICtrlCreateInput('', 10, 10, 300, 25, 0x2000);только цифры
    Local $iInputSleep = GUICtrlCreateInput('', 10, 35, 300, 25, 0x2000); только цифры
    Local $iButton = GUICtrlCreateButton('OK', 10, 70, 70, 25, 0x0001)
    GUISetState()

    While 1
        Switch GUIGetMsg()
            Case -3
                Exit
            Case $iButton
                $sRSend = GUICtrlRead($iInputSend)
                $sRSleep = GUICtrlRead($iInputSleep)
                If Not $sRSend And Not $sRSleep Then Exit
                GUISetState(@SW_HIDE)
                _RunNot()
                $sRSend = GUICtrlSetData($iInputSend, '')
                $sRSleep = GUICtrlSetData($iInputSleep, '')
                GUISetState(@SW_SHOW)
        EndSwitch
    WEnd
EndFunc   ;==>_GuiNote

Func _RunNot()
    For $i = 1 To 3
        Run("notepad.exe")
        WinWaitActive("[class:Notepad]")
        Send($sRSend)
        Sleep($sRSleep)
        WinClose("[class:Notepad]")
        ControlClick("[class:#32770]", "", "[CLASS:Button; INSTANCE:2]")
    Next
EndFunc   ;==>_RunNot
 
Автор
S

seed6

Новичок
Сообщения
14
Репутация
0
Спасибо большое. Хоть сейчас не пойму что написано, завтра приду с работы, скомпилирую и запущу.
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
однократное появление окна, потом бесконечный цикл с блокнотом. выход по Esc
Код:
Global $sRSend, $sRSleep
HotKeySet('{Esc}', '_Stop');завершение работы скрипта

_GuiNote()

Func _GuiNote()
    Local $hGui = GUICreate('Send & Sleep', 320, 100)
    Local $iInputSend = GUICtrlCreateInput('', 10, 10, 300, 25, 0x2000);только цифры
    Local $iInputSleep = GUICtrlCreateInput('', 10, 35, 300, 25, 0x2000); только цифры
    Local $iButton = GUICtrlCreateButton('OK', 10, 70, 70, 25, 0x0001)
    GUISetState()

    While 1
        Switch GUIGetMsg()
            Case -3
                Exit
            Case $iButton
                $sRSend = GUICtrlRead($iInputSend)
                $sRSleep = GUICtrlRead($iInputSleep)
                If Not $sRSend And Not $sRSleep Then Exit
                GUIDelete()
                _RunNot()
        EndSwitch
    WEnd
EndFunc   ;==>_GuiNote

Func _RunNot()
    While 1
        Run("notepad.exe")
        WinWaitActive("[class:Notepad]")
        Send($sRSend)
        Sleep($sRSleep)
        WinClose("[class:Notepad]")
        ControlClick("[class:#32770]", "", "[CLASS:Button; INSTANCE:2]")
    WEnd
EndFunc   ;==>_RunNot

Func _Stop()
    Exit
EndFunc   ;==>_Stop
 
Последнее редактирование:
Автор
S

seed6

Новичок
Сообщения
14
Репутация
0
А там где с окном, это то что вы первый раз прислали?
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
первый скрипт
запускается окно, делаем ввод цифр, жмем ОК, три раза запускается блокнот. - и все это до бесконечности, пока не нажмем в окне крестик

второй скрипт
один раз запускается окно, вводим цифры, жмем ОК и потом запускается блокнот в бесконечном цикле. пока не нажмем клавишу Esc

опробуй два примера. выбери нужный. если нужны уточнения, добавим
 
Автор
S

seed6

Новичок
Сообщения
14
Репутация
0
Вот это спасибо огромное, завтра обязательно запущу, отпишусь. Я бы такое сам не смог написать, я ведь не программист и многое для меня не понятно в autoit
Сообщение автоматически объединено:

Добрый день. запустил оба варианта, думаю больше подходит второй вариант. редактировал окно которое появляется при запуске скрипта, по аналогии добавил ещё по два поля. Только не пойму, как сделать чтобы при первом запуске блокнота, вставлялась цифра из первого поля; при втором запуске блокнота, вставлялась цифра из второго поля; соответственно при третьем запуске- цифра из третьего поля и снова из первого поля, из второго поля из третьего и т.д.
 

Вложения

  • проект 2.au3
    1.8 КБ · Просмотры: 0
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
Пробуй

Код:
Global $aRSS[3][2]
HotKeySet('{Esc}', '_Stop');завершение работы скрипта

_GuiNote()

Func _GuiNote()
    Local $hGui = GUICreate('Send & Sleep', 400, 260)
    $aRSS[0][0] = GUICtrlCreateInput('', 10, 10, 300, 25, 0x2000);только цифры
    __GUICtrlEdit_SetCueBanner(-1, 'Send')
    $aRSS[0][1] = GUICtrlCreateInput('', 10, 45, 300, 25, 0x2000); только цифры
    __GUICtrlEdit_SetCueBanner(-1, 'Sleep')
    $aRSS[1][0] = GUICtrlCreateInput('', 10, 80, 300, 25, 0x2000);только цифры
    __GUICtrlEdit_SetCueBanner(-1, 'Send')
    $aRSS[1][1] = GUICtrlCreateInput('', 10, 115, 300, 25, 0x2000); только цифры
    __GUICtrlEdit_SetCueBanner(-1, 'Sleep')
    $aRSS[2][0] = GUICtrlCreateInput('', 10, 150, 300, 25, 0x2000);только цифры
    __GUICtrlEdit_SetCueBanner(-1, 'Send')
    $aRSS[2][1] = GUICtrlCreateInput('', 10, 185, 300, 25, 0x2000); только цифры
    __GUICtrlEdit_SetCueBanner(-1, 'Sleep')
    Local $iButton = GUICtrlCreateButton('OK', 10, 225, 70, 25, 0x0001)
    GUISetState()

    While 1
        Switch GUIGetMsg()
            Case -3
                Exit
            Case $iButton
                For $i = 0 To UBound($aRSS) - 1
                    $aRSS[$i][0] = GUICtrlRead($aRSS[$i][0])
                    $aRSS[$i][1] = GUICtrlRead($aRSS[$i][1])
                Next
                GUIDelete()
                _RunNot()
        EndSwitch
    WEnd
EndFunc   ;==>_GuiNote

Func _RunNot()
    While 1
        For $i = 0 To UBound($aRSS) - 1
            Run("notepad.exe")
            WinWaitActive("[class:Notepad]")
            Send($aRSS[$i][0])
            Sleep($aRSS[$i][1])
            WinClose("[class:Notepad]")
            ControlClick("[class:#32770]", "", "[CLASS:Button; INSTANCE:2]")
        Next
        Sleep(10)
    WEnd
EndFunc   ;==>_RunNot

Func __GUICtrlEdit_SetCueBanner($i_ID, $s_Text)
    Local Const $__EM_SETCUEBANNER = 0x1501
    Return GUICtrlSendMsg($i_ID, $__EM_SETCUEBANNER, 1, String($s_Text))
EndFunc   ;==>__GUICtrlEdit_SetCueBanner

Func _Stop()
    Exit
EndFunc   ;==>_Stop
 
Автор
S

seed6

Новичок
Сообщения
14
Репутация
0
можно чтобы весь процесс связанный с блокнотом происходил в фоновом режиме? может ControlHide ( "title", "text", controlID ) ?
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
что имеется в виду под фоновым режимом? скрыть окно блокнота вообще?
 
Автор
S

seed6

Новичок
Сообщения
14
Репутация
0
Чтобы процесс на экране не отображался
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
замени функцию
Код:
Func _RunNot()
    While 1
        For $i = 0 To UBound($aRSS) - 1
            Run("notepad.exe", '', @SW_MINIMIZE)
            WinWait("[class:Notepad]")
            ControlSetText('[class:Notepad]', '', '[CLASS:Edit; INSTANCE:1]', $aRSS[$i][0])
            Sleep($aRSS[$i][1])
            WinClose("[class:Notepad]")
            ControlClick("[class:#32770]", "", "[CLASS:Button; INSTANCE:2]")
        Next
        Sleep(10)
    WEnd
EndFunc   ;==>_RunNot
 
Автор
S

seed6

Новичок
Сообщения
14
Репутация
0
Здравствуйте. Можно сделать так, чтобы после нажатия на кнопку ОК - скрипт продолжил выполняться через n часов. Поле для ввода времени я сделал
Сообщение автоматически объединено:

 

Вложения

  • оригинал заготовка с отложенным временем.au3
    2.3 КБ · Просмотры: 1
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
поле ввода для начальной паузы не нужно ставить в массив. поэтому для этого элемента отдельная переменная
Код:
Local $iPause = GUICtrlCreateInput('', 150, 225, 100, 25, 0x2000)
    __GUICtrlEdit_SetCueBanner(-1, 'Vremy')
    Local $iButton = GUICtrlCreateButton('OK', 10, 225, 70, 25, 0x0001)
    GUISetState()

    While 1
        Switch GUIGetMsg()
            Case -3
                Exit
            Case $iButton
                For $i = 0 To UBound($aRSS) - 1
                    $aRSS[$i][0] = GUICtrlRead($aRSS[$i][0])
                    $aRSS[$i][1] = GUICtrlRead($aRSS[$i][1])
                Next
                Local $iFlagP = GUICtrlRead($iPause)
                GUIDelete()
                Sleep($iFlagP)
                _RunNot()
        EndSwitch
    WEnd
 
Автор
S

seed6

Новичок
Сообщения
14
Репутация
0
Спасибо, разобрался, все получилось
 
Верх