önntest du mir ggf mal bitte ein beispiel machen
Ich habe deinen Code mal als Basis genommen, einiges - aber nicht alles - optimiert, aber das Unnütze noch nicht raus geworfen, kannst du dann selbst bereinigen.
Ich gehe davon aus, da du "Stunden|Minuten|Sekunden" erfasst, dass das keine Uhrzeit, sondern die Dauer der Aufnahme ist. Btw: Wozu Hotkey? Du hast doch einen Start/Stop - Button. Hotkeys sind Global und du kommst oft in Konflikt mit dem System (F7 ist z.B. bei mir nicht möglich). Verwende besser GuiSetAccelerators.
Schau es dir an:
AutoIt
;-- TIME_STAMP 2022-07-13 13:21:48
#include <GUIConstantsEx.au3>
Global $end, $end2, $timer, $timer2, $running = False, $running2 = False
;~ Global $input[3], $input2[3], $input3[3], $input4[3], $input5[3]
Global $aInput[5][3]
Global $name[3]=['Stunden','Minuten','Sekunden'], $name2[3]=['','',''], $name3[3]=['','','']
Global $name4[3]=['','',''], $name5[3]=['','',''], $button[2]=['Start','Stop']
Global Const $sWinOBS = "OBS 26.1.1 (64-bit, windows) - Profil: Unbenannt - Szenen: Unbenannt"
Global $bIdle = True ; True = Leerlauf, keine Aufnahme läuft
Global $TimerStart ; wird gesetzt wenn eine Aufnahme beginnt
Global $aRecTimes[5] ; die eingetragenen Aufnahmezeiten in Sekunden
Global $aCheckbox[4] ; Array mit Checkbox-ID
Global $iCurrRec = -1 ; Index der aktuellen Aufnahme, bei Programmstart: keiner
Global $hGui = GUICreate('5 Aufnahme-Timer', 800, 700, Default, Default, 0x10C80000)
For $i=0 To 2
GUICtrlCreateGroup($name[$i], 5+70*$i, 5, 70, 40)
GUICtrlCreateGroup($name2[$i], 5+70*$i, 35, 70, 40)
GUICtrlCreateGroup($name3[$i], 5+70*$i, 65, 70, 40)
GUICtrlCreateGroup($name4[$i], 5+70*$i, 95, 70, 40)
GUICtrlCreateGroup($name5[$i], 5+70*$i, 125, 70, 40)
For $j = 0 To 4
$aInput[$j][$i] = GUICtrlCreateInput('', 10+70*$i, 20+30*$j, 60, 20, 1)
Next
;~ $input[$i] = GUICtrlCreateInput('', 10+70*$i, 20, 60, 20, 1)
;~ $input2[$i] = GUICtrlCreateInput('', 10+70*$i, 50, 60, 20, 1)
;~ $input3[$i] = GUICtrlCreateInput('', 10+70*$i, 80, 60, 20, 1)
;~ $input4[$i] = GUICtrlCreateInput('', 10+70*$i, 110, 60, 20, 1)
;~ $input5[$i] = GUICtrlCreateInput('', 10+70*$i, 140, 60, 20, 1)
Next
$go = GUICtrlCreateButton('Start', 550, 650, 210, 20)
$Herunterfahren = GUICtrlCreateCheckbox("Computer herunterfahren", 600, 600, 201, 25)
For $i = 0 To 3
$aCheckbox[$i] = GUICtrlCreateCheckbox("Aufnahme " & $i+2 & " Aktivieren", 220, 47+$i*30, 201, 25)
Next
;~ $Input2 = GUICtrlCreateCheckbox("Aufnahme 2 Aktivieren", 220, 47, 201, 25)
;~ $Input3 = GUICtrlCreateCheckbox("Aufnahme 3 Aktivieren", 220, 77, 201, 25)
;~ $Input4 = GUICtrlCreateCheckbox("Aufnahme 4 Aktivieren", 220, 107, 201, 25)
;~ $Input5 = GUICtrlCreateCheckbox("Aufnahme 5 Aktivieren", 220, 137, 201, 25)
$Close = GUICtrlCreateButton("Schließen", 550, 550, 83, 25)
$Label2 = GUICtrlCreateLabel("Programm Start mit Hotkey F7", 500, 500, 170, 24)
GUICtrlSetFont(-1, 6, 800, 0, "MS Sans Serif")
GUISetState()
; MainLoop
While True
Switch GUIGetMsg()
Case -3
Exit
Case $go
If $bIdle Then
StartTimer()
Else
StopTimer() ; zum Abbruch einer laufenden Aufnahme
EndIf
EndSwitch
If Not $bIdle Then
If _CheckTimer() Then StopTimer()
EndIf
WEnd
Func _CalcRecordingSeconds()
Local $inHr, $inMin, $inSec, $sumSec = 0
For $i = 0 To 4
$sumSec = 0
If $i > 0 Then
If BitAND(GUICtrlRead($aCheckbox[$i-1]), $GUI_UNCHECKED) Then ContinueLoop
EndIf
$inHr = GUICtrlRead($aInput[$i][0])
$inMin = GUICtrlRead($aInput[$i][1])
$inSec = GUICtrlRead($aInput[$i][2])
If $inHr <> '' Then $sumSec += $inHr*60*60
If $inMin <> '' Then $sumSec += $inMin*60
If $inSec <> '' Then $sumSec += $inSec
$aRecTimes[$i] = $sumSec
Next
EndFunc
;HotKey's
;~ HotKeySet ("{F7}", "StartTimer") ; Soll das unabhängig aufgerufen werden können - auch wenn die GUI im Hintergrund ist?
; Wenn nicht: GUISetAccelerators() verwenden.
HotKeySet ("{F7}", '_ToggleStartStop')
Func _ToggleStartStop()
Return ($bIdle ? StartTimer() : StopTimer())
EndFunc
Func StartTimer()
If $iCurrRec = -1 Then ; erstmaliger Aufruf
_CalcRecordingSeconds()
EndIf
While $iCurrRec < UBound($aRecTimes) -1
$iCurrRec += 1
If $aRecTimes[$iCurrRec] <> 0 Then ExitLoop ; leere Einträge überspringen
WEnd
If $aRecTimes[$iCurrRec] = 0 Then Return MsgBox(16, 'FEHLER', 'Keine Aufnahmezeiten eingetragen!')
GUICtrlSetData($go, 'Stop')
MsgBox(64, 'Aufnahme', 'Starte Aufnahme #' & $iCurrRec+1)
$TimerStart = TimerInit()
$bIdle = False
; starte Aufnahme
ControlSend($sWinOBS, "", "", "{F8}")
EndFunc
Func _CheckTimer()
Return (Floor(TimerDiff($TimerStart)/1000) >= $aRecTimes[$iCurrRec])
EndFunc
Func StopTimer()
If $iCurrRec = UBound($aRecTimes) -1 Then ; letzte Aufnahme beendet
If BitAND(GUICtrlRead($Herunterfahren), $GUI_CHECKED) Then
Return MsgBox(64, 'Herunterfahren', 'Hier [#' & @ScriptLineNumber & '] Shutdown einfügen.')
EndIf
Else
$bIdle = True
; beende Aufnahme
ControlSend($sWinOBS, "", "", "{F8}")
GUICtrlSetData($go, 'Start')
MsgBox(64, 'Aufnahme', 'Stoppe Aufnahme #' & $iCurrRec+1)
EndIf
EndFunc
#comments-start
;##############################
;Start mit der ersten Aufnahme#
;##############################
;Funktion das mit der Taste F7 gestartet wird
Func StartTimer()
HotKeySet ("{F7}")
$running = Not $running
GUICtrlSetData($go, $button[$running])
$end = Convert($input)
$timer=TimerInit()
If $running And TimerDiff($timer)>=$end Then
$running = False
GUICtrlSetData($go, $button[$running])
Send ("{F8}")
;;;;;
If _IsChecked($Input2) Then
Call ("ANAufnahem2")
Else
Call ("AUSAufnahem2")
EndIf
EndIf
EndFunc
;Funktion mit Knöpfen (Knopf Start) ist hier mit enthalten und Schließen
While 1
Switch GUIGetMsg()
Case $Close
Exit
Case -3
Exit
Case $go
$running = Not $running
GUICtrlSetData($go, $button[$running])
$end = Convert($input)
$timer=TimerInit()
Case Else
If $running And TimerDiff($timer)>=$end Then
$running = False
GUICtrlSetData($go, $button[$running])
ControlSend($sWinOBS, "", "", "{F8}")
Send ("{F8}")
;;;;;
If _IsChecked($Input2) Then
Call ("ANAufnahem2")
Else
Call ("AUSAufnahem2")
EndIf
EndIf
EndSwitch
WEnd
Func Convert($array)
Return 1000*(60*(60*(GUICtrlRead($array[0]))+GUICtrlRead($array[1]))+GUICtrlRead($array[2]))
EndFunc
Func _IsChecked($Herunterfahren)
Return BitAND(GUICtrlRead($Herunterfahren), $GUI_CHECKED) = $GUI_CHECKED
EndFunc
;######################
;Aufnahme 1 endet hier#
;######################
Func ANAufnahem2 ()
Sleep (3000) ;Puffer um abzuspeichern
While 2
Switch GUIGetMsg()
Case $Close
Exit
Case -3
Exit
Case $go
$running2 = Not $running2
GUICtrlSetData($go, $button [$running2])
$end = Convert($input2)
$timer2=TimerInit()
Case Else
If $running2 And TimerDiff($timer2)>=$end2 Then
$running2 = False
GUICtrlSetData($go, $button[$running2])
ControlSend($sWinOBS, "", "", "{F8}")
Send ("{F8}")
;;;;;
If _IsChecked($Input3) Then
Call ("AN")
Else
Call ("AUS")
MsgBox(0, 'Info', 'Tesssssssst 2 durch an?')
EndIf
EndIf
EndSwitch
WEnd
EndFunc
Func AUSAufnahem2 ()
ControlSend($sWinOBS, "", "", "{F8}")
Sleep (1000)
MsgBox(0, 'Info', '2 durch AUS')
EndFunc
;##################################################################################################
;Hier wird nochmal abgefragt und entschieden ob der Harken bei Herrunterfahren drin ist oder nicht#
;##################################################################################################
Func AN()
ControlSend($sWinOBS, "", "", "{F8}")
Sleep (1000)
MsgBox(0, 'Info', 'ANNNNNNNNNNNNNNNNNNNNNNNNNNN')
; Shutdown(1)
EndFunc
Func AUS()
ControlSend($sWinOBS, "", "", "{F8}")
Sleep (1000)
MsgBox(0, 'Info', 'Aufnahme gestoppt')
EndFunc
#comments-end
Alles anzeigen
