Что нового

Простой кликер

cobra2029

Новичок
Сообщения
54
Репутация
0
Ув. форумчане.

Возникла необходимость в написании СВОЕГО кликире.

Суть простая:
Вот окно скрипта как я его представляю:



ну и собственно ряд вопросов которые возникли:

1. самый главный вопрос: как написать таймер отдельный для каждой кнопки, желательно с примером.
Т.е. есть некий бесконечный цикл в теле которого крутятся таймеры для каждой кнопки.

предполагаю что эта задача решается через case но самому решить не удалось.


2. где можно поподробнее познакомиться с чекбоксами? (на простой хелп не отсылать) Тоже желательно с примерами.


Все кто откликнется большое спасибо за помощь.
 

nu3dell

Осваивающий
Сообщения
139
Репутация
24
Но скорее всего не то


Код:
#include <GUIConstants.au3>
GUICreate("", 150, 70,Default,Default)
$chk=GUICtrlCreateCheckbox('Клавиша1',10,10,15,15)
$put=GUICtrlCreateInput("2000",80,10,50,20)
$btn=GUICtrlCreateButton("Поехали!",45,40,90)
GUISetState()
	IF GUICtrlRead($chk)=$GUI_CHECKED Then 
		MsgBox(0,'','Галочка стоит')
		EndIf
While 1
    $msg = GUIGetMsg()
    Select
	Case $msg = $GUI_EVENT_CLOSE
		Exit
Case $msg = $btn 
IF GUICtrlRead($chk)=$GUI_CHECKED Then 
	Sleep(GUICtrlread($put))
		MsgBox(0,'','Галочка стоит')
	ElseIf GUICtrlRead($chk)=$GUI_UNCHECKED Then 
		MsgBox(0,'','Галочка нестоит')
		EndIf
	
EndSelect
WEnd
 

axlwor

Скриптер
Сообщения
657
Репутация
147
А таймер прикручивай к нажатию нужного контрола.
TimerInit()/TimerDiff()
 
Автор
C

cobra2029

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

Если стоит галочка - параметр используется и клавиша нажимается.
Если не стоит - не используется и не нажимается.

По поводу таймеров пробовал...

Вопрос как использовать их все одновременно.
точнее, время у всех таймеров не одинаковое и некоторых таймеров вообще может не быть.


уточнил детали
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
cobra2029,
Попробуйте так:
Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>

Dim $aControls[4][5] = [[3],['Key 1'],['Key 2'],['Key 3']]
$fWork = False

GUICreate('Test', 170, 200)
For $i = 1 To $aControls[0][0]
	$aControls[$i][1] = GUICtrlCreateCheckbox($aControls[$i][0], 20, 10 + ($i - 1) * 30, 60, 20)
	$aControls[$i][2] = GUICtrlCreateInput(0, 90, 10 + ($i - 1) * 30, 60, 20, $ES_READONLY)
	GUICtrlCreateUpdown(-1)
	GUICtrlSetLimit(-1, 10, 0)
Next
$nButtonStart = GUICtrlCreateButton('Start', 35, 120, 100, 30)
$nButtonStop = GUICtrlCreateButton('Stop', 35, 160, 100, 30)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButtonStop
			$fWork = False
			ConsoleWrite('-----> Stop Click' & @LF)
			GUICtrlSetState($nButtonStop, $GUI_DISABLE)
			GUICtrlSetState($nButtonStart, $GUI_ENABLE)
			For $i = 1 To $aControls[0][0]
				$aControls[$i][3] = 0
				$aControls[$i][4] = 0
			Next
		Case $nButtonStart
			For $i = 1 To $aControls[0][0]
				If BitAND(GUICtrlRead($aControls[$i][1]), $GUI_CHECKED) Then
					$aControls[$i][3] = GUICtrlRead($aControls[$i][2])
					If Number($aControls[$i][3]) Then
						$aControls[$i][4] = TimerInit()
						$fWork = True
					EndIf
				EndIf
			Next
			If $fWork Then
				GUICtrlSetState($nButtonStart, $GUI_DISABLE)
				GUICtrlSetState($nButtonStop, $GUI_ENABLE)
			EndIf
	EndSwitch
	If $fWork Then
		For $i = 1 To $aControls[0][0]
			If Number($aControls[$i][3]) Then
				If TimerDiff($aControls[$i][4]) > $aControls[$i][3] * 1000 Then; sec
					;здесь можно нажимать клавиши
					ConsoleWrite($aControls[$i][0] & @TAB & StringFormat('%.1f sec', TimerDiff($aControls[$i][4]) / 1000) & @LF)
					Send($aControls[$i][0])
					$aControls[$i][4] = TimerInit()
				EndIf
			EndIf
		Next
	EndIf
WEnd
 
Автор
C

cobra2029

Новичок
Сообщения
54
Репутация
0
мммм спасибо... если можно еще прокомментировать код... чтоб не было больше глупых вопросов
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
cobra2029,
Спрашивайте, что не понятно.
 
Автор
C

cobra2029

Новичок
Сообщения
54
Репутация
0
так... чесно, непонятно вообще ничего...


Dim $aControls[4][5] = [[3],['Key 1'],['Key 2'],['Key 3']] - как я понял массив переменных?

тогда как в эту часть кода вставить нажатие клавиши для определённой связки (чекбокс1+инп1)?
Код:
If $fWork Then
        For $i = 1 To $aControls[0][0]
            If Number($aControls[$i][3]) Then
                If TimerDiff($aControls[$i][4]) > $aControls[$i][3] * 1000 Then; sec
                    ;здесь можно нажимать клавиши
                    ConsoleWrite($aControls[$i][0] & @LF)
                    $aControls[$i][4] = TimerInit()
                EndIf
            EndIf
        Next
    EndIf


исправил некоторые орф. ошибки
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
cobra2029 [?]
массив переманенных?
Да, вместо Key 1 и т.д. вставьте те клавиши, которые надо нажимать.
как в эту часть кода вставить нажатие клавиши
Вместо
Код:
;...
ConsoleWrite($aControls[$i][0] & @TAB & StringFormat('%.1f sec', TimerDiff($aControls[$i][4]) / 1000) & @LF)
;...
;поставьте
;...
Send($aControls[$i][0])  ;ControlSend()
;...
Я свой код поменял.
 
Верх