Что нового

Таймер со звуковым оповещением

Olegz11

Новичок
Сообщения
5
Репутация
0
Таймер со звуковым оповещением иногда выдает ошибку, если выбрано звуковое оповещение. помогите подкорректировать скрипт.
"C:\Users\1?\Desktop\?????? ??????? - ?????.au3" (61) : ==> Variable used without being declared.:
If $C = 1 Or 0 Then ExitLoop
If ^ ERROR
>Exit code: 1 Time: 56.4
 

Вложения

  • 1аутоид звук1.jpg
    1аутоид звук1.jpg
    39.3 КБ · Просмотры: 6
Последнее редактирование:

Oki

Продвинутый
Сообщения
452
Репутация
62
Скрипт на этом форуме следует заключать в специальные теги для кода.

Конструкция в этой и многих других строках весьма странная. Двоеточие после имени переменной вообще непонятного свойства. В AutoIt его не ставят даже при присваивании, не говоря об условном операторе. Значение после логического "или" тоже непонятного свойства. Может быть, имелось в виду вот такое?
Код:
If $C = 1 Or C = 0 Then
 
Автор
O

Olegz11

Новичок
Сообщения
5
Репутация
0
Код:
Global $hours
Global $minutes
Global $C
AdlibRegister("UpdateTime")
AdlibRegister("HOUR")
AdlibRegister("MIN")
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <TrayConstants.au3>
#include <Memory.au3>


#NoTrayIcon
#include <GUIConstantsEx.au3>
Global $X = -1, $Y = -1   ; запомнить координаты окна https://autoit-script.ru/threads/kak-zapomnit-koordinaty-okna-na-sostojanie-pri-zakrytii.6883/
If FileExists(@ScriptDir & '\taimerXY.ini') Then
	$X = IniRead(@ScriptDir & '\taimerXY.ini', 'POS', 'X', '')
	$Y = IniRead(@ScriptDir & '\taimerXY.ini', 'POS', 'Y', '')
EndIf

$Form1_1 = GUICreate("Timer", 325, 106, $X, $Y) ; размеры  ,расположение X горизонталь  Y вертикаль
GUISetBkColor(0x2D9C43) ; цвет фона   золотой 0xd6d013 зеленый 0x2D9C43
$Label1 = GUICtrlCreateLabel("Время", 8, 6, 76, 20) ; 1-отступ с лева 2-отступ сверху
GUICtrlSetFont(-1, 14, 700, 0, "MS Sans Serif") ; Время 14 размер шрифта
$Label2 = GUICtrlCreateLabel("Label2", 80, 6, 90, 20) ; 1-отступ с лева 2-отступ сверху 3- ширина всего текста
GUICtrlSetFont(-1, 14, 700, 0, "MS Sans Serif") ; часы 14 размер шрифта
$Label3 = GUICtrlCreateLabel("ЧЧ", 8, 50, 28, 25)  ; часы
GUICtrlSetFont(-1, 14, 700, 0, "MS Sans Serif") ; ЧЧ 14 размер шрифта
$Input1 = GUICtrlCreateInput("", 8, 28, 65, 23) ; расположение  ввода времени
$Label4 = GUICtrlCreateLabel("ММ", 80, 50, 38, 25) ; расположение  ММ
GUICtrlSetFont(-1, 14, 700, 0, "MS Sans Serif")   ; размер ММ
$Input2 = GUICtrlCreateInput("", 80, 28, 73, 23) ; 1 отступ 2й белой полоски , 73 длинна
$Button1 = GUICtrlCreateButton("Выполнить ", 8, 72, 120, 28)
$Combo1 = GUICtrlCreateCombo("", 168, 28, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Выключение|Вывести сообщение|Звук")
$Label5 = GUICtrlCreateLabel("Текст для сообщения", 135, 53, 188, 24)
GUICtrlSetFont(-1, 12, 700, 0, "MS Sans Serif")
$Input3 = GUICtrlCreateInput("", 145, 75, 169, 21) ; полоск для текста сообщения
GUISetState(@SW_SHOW)

Opt("TrayMenuMode", 3)
$IdMenu = TrayCreateMenu ("Действия")
$iDisplay = TrayCreateItem("Выключить таймер", $IdMenu)
$exit = TrayCreateItem("Выход", $IdMenu)
$SHOW = TrayCreateItem("Развернуть", $IdMenu)
TraySetState($TRAY_ICONSTATE_SHOW)
TraySetToolTip("Timer")


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
	    Case $GUI_EVENT_CLOSE
			$WS = WinGetState($Form1_1)
			If Not BitAND($WS, 16) Then
				$WP = WinGetPos($Form1_1)
				IniWrite(@ScriptDir & '\taimerXY.ini', 'POS', 'X', $WP[0])
				IniWrite(@ScriptDir & '\taimerXY.ini', 'POS', 'Y', $WP[1])
			EndIf
			Exit
		Case $Button1

		   While 1
			If GUICtrlRead($Input1) = HOUR() Then
			If GUICtrlRead($Input2)  = MIN()  Then
			    If GUICtrlRead($Combo1) = "Звук" Then
				    SoundSetWaveVolume(100)
					SoundPlay("C:\2\Готово1.mp3", 1)
                    Sleep(1000)
					If ($C = 1) Or ($C = 0) Then ExitLoop ;If $C = 1 Or 0 Then ExitLoop ; If $C = 1 Or C = 0 Then If ($C = 1) Or ($C = 0) Then ExitLoop
				EndIf
            	If GUICtrlRead($Combo1) = "Вывести сообщение" Then
	            $amsg =   MsgBox(64,"Информация",GUICtrlRead($Input3))
               If $amsg =1 Or $amsg = -1 Then ExitLoop
				EndIf
				If GUICtrlRead($Combo1) = "Выключение" Then
				 $downsystem = Shutdown(8)
			    If $downsystem =1 Or $downsystem = 0 Then ExitLoop
				EndIf
			EndIf
			EndIf
			Switch TrayGetMsg()
			Case $iDisplay
 				ExitLoop

				Case $exit
					Exit
        EndSwitch
		   WEnd
	EndSwitch
WEnd


Func UpdateTime()
 GUICtrlSetData($Label2,@HOUR & ":" & @MIN & ":" & @SEC)
EndFunc

Func HOUR()
	Return @HOUR
EndFunc

Func MIN()
	Return @MIN
 EndFunc

Func SEC()
	Return @SEC
 EndFunc
 
Последнее редактирование:

Oki

Продвинутый
Сообщения
452
Репутация
62
Код:
If $C = 1 Or C = 0 Then
Подобные изменения светят и другим строкам скрипта, который исчез из поля зрения после редактуры стартового поста.
Сообщение автоматически объединено:

Не "[CODE][/CODE]", а "[AUTOIT][/AUTOIT]".
 
Автор
O

Olegz11

Новичок
Сообщения
5
Репутация
0
Спасибо! убрал двоеточие ":" , работает все ошибка пока не вылетает. Проверил 5 раз, не вылетала ошибка а на 6 вылетела опять та же ошибка, вот странно не могу разобраться. If $C = 1 Or 0 Then ExitLoop не помогает...также 5-6 раз работает, потом тоже работает ,но вылетает ошибка. К сожалению я новичок, и не смогу с этим разобраться...тем более что с начало не проблемм а потом вдруг ошибка вылетает. Изменил на If $C = 1 Or $C = 0 Then ExitLoop
If $amsg =1 Or $amsg = -1 Then ExitLoop
If $downsystem =1 Or $downsystem = 0 Then ExitLoop все работает. Но перестали работать все функции в трее.
 
Последнее редактирование:

Oki

Продвинутый
Сообщения
452
Репутация
62
Код внутри тегов, а не после них. Есть кнопка предварительного просмотра.
If $C: = 1 Or 0 Then ExitLoop
If $amsg = 1 Or -1 Then ExitLoop
If $downsystem = 1 Or 0 Then ExitLoop
Ещё раз. Эти три строки явно не соответствуют цели. Двоеточие в первой строке вообще не по синтаксису. Имя переменной и равенство следует повторять после Or, если цель - при любом из двух значений получить истину.
Сообщение автоматически объединено:

Неплохо бы также научиться ставить табуляции. Для этого полезно посмотреть, как пишут скрипты опытные скриптеры.
Сообщение автоматически объединено:

Спасибо! убрал двоеточие ":" , работает все ошибка пока не вылетает. Проверил 5 раз, не вылетала ошибка а на 6 вылетела опять та же ошибка, вот странно не могу разобраться.
Сообщение отредактировал, а что после него далее следовало, не читал? Так и осталось
Код:
If $C = 1 Or 0 Then ExitLoop
If $amsg = 1 Or -1 Then ExitLoop
If $downsystem = 1 Or 0 Then ExitLoop
вместо
Код:
If $C = 1 Or $C = 0 Then ExitLoop
If $amsg =1 Or $amsg = -1 Then ExitLoop
If $downsystem =1 Or $downsystem = 0 Then ExitLoop
по-прежнему?
 
Последнее редактирование:

IMStrelcov

CTPEJIbLLOB
Сообщения
258
Репутация
66
Таймер со звуковым оповещением иногда выдает ошибку, если выбрано звуковое оповещение. помогите подкорректировать скрипт.
"C:\Users\1?\Desktop\?????? ??????? - ?????.au3" (61) : ==> Variable used without being declared.:
If $C = 1 Or 0 Then ExitLoop
If ^ ERROR
>Exit code: 1 Time: 56.4
Первое: переменную "$C" нужно объявить в начале скрипта, так как у вас идет проверка переменной, которая в скрипте нигде не объявлена.
Второе: зачем проверять переменную у которой в процессе работы скрипта, значение нигде не меняется.
Для начала объявите переменную в начале скрипта "Global $C".
P.S.
Variable used without being declared
Переменная, используется без объявления
 

Oki

Продвинутый
Сообщения
452
Репутация
62
Код:
If $C = 1 Or 0 Then ExitLoop

Для начала объявите переменную в начале скрипта "Global $C".
Как бы ни была объявлена переменная, эта строка кода бессмысленна. Ну разве что только с единицей если сравнивать, так как логическое "или" с нулём ничего не меняет. Но в скрипте есть подобные места, где иные значения в логическое "или" поступают. Так что это явная ошибка синтаксиса для выражения поставленной цели (даже если формально интепретатор это воспринимает в качестве легального синтаксиса).
 
Последнее редактирование:

IMStrelcov

CTPEJIbLLOB
Сообщения
258
Репутация
66
По этому и пишу - ДЛЯ НАЧАЛА, что должно исключить выскакивающую ошибку.
А интепретатор это
If $C = 1 Or 0 Then ExitLoop
воспринимает в качестве легального синтаксиса так:
If ($C = 1) Or (0) Then ExitLoop
Как выше описали правильно так:
If ($C = 1) Or ($C = 0) Then ExitLoop
 
Последнее редактирование:
Автор
O

Olegz11

Новичок
Сообщения
5
Репутация
0
-
Сообщение автоматически объединено:

 
Последнее редактирование:
Верх