Danke Pee,
war ja wieder mal 'ne superschnelle Antwort.
RESPEKT ![]()
Danke Pee,
war ja wieder mal 'ne superschnelle Antwort.
RESPEKT ![]()
Die Beta-Hilfe ist leider etwas kurz und ich bin mir da nicht sicher:
Stoppt die Programmausführung bei _IsPressed(), bis die angegebene Taste gedrückt wird ?
Ich benötige genau diese Konstellation, da der User das Ende seiner Interaktion durch Tastendruck angeben muß und danach das Script weiterlaufen soll.
Hier der betreffende Teil des Codes (siehe Zeile 14):
Func _report()
If $state1 = 8 Then
ControlClick($main_wdw1, "", "Button9") ; Button LabManager
EndIf
If $state2 = 8 Then
ControlClick($main_wdw2, "", "Button9") ; Button LabManager
EndIf
ControlClick("LabManager", "", "OFormSub16") ; CUSTOM SCORE SET REPORTS
;ControlClick("LabManager","", "OFormSub22") ; REPORT SELECTION ?? nötig ??
ControlCommand("LabManager", "", "OFormSub22", "SelectString", $report) ; REPORT SELECTION
Send("{ENTER}")
ControlClick("LabManager", "", "OTabControl3") ; WECHSELN ZU PATIENTENAUSWAHL
MsgBox(4096, "Hinweis", "Bitte wählen Sie den Patienten aus" & @LF & "Bestätigen Sie die Auswahl mit Taste <F9> !")
If _IsPressed("78") Then ; User hat Auswahl beendet und <F9> gedrückt
$lbl_name = ControlCommand("LabManager", "", "OKttbx2", "GetCurrentSelection", "") ; ausgewählten Patienten auslesen
$lbl_name = StringReplace($lbl_name, " ", "")
$lbl_name = StringReplace($lbl_name, ",", "_")
$lbl_date = ControlCommand("LabManager", "", "OKttbx3", "GetCurrentSelection", "") ; ausgewähltes Datum auslesen
$lbl_date = _MultiDateToNorm($lbl_date, 1) ; in String wandeln (JJJJ-MM-TT)
ControlClick("LabManager", "", "OFormSub27") ; Registerkarte REPORTS
ControlClick("LabManager", "", "OFormSub13") ; Schaltfläche PDF
ControlCommand("Create a PDF File", "", "ComboBox1", "SelectString", $pdf_target) ; Speicherort auswählen
ControlCommand("Create a PDF File", "", "Edit1", "AddString", $lbl_name & "_" & $lbl_date) ; Dateinamen eintragen
ControlClick("Create a PDF File", "", "Button2") ; Button Speichern
EndIf
EndFunc ;==>_report
Alles anzeigen
Naja, leider nix mit Controls ![]()
Da mir die Mausbewegungen zu langsam sind (oder kann man die Geschwindigkeit irgendwo definieren ??) konnte ich das ganze auf einen Mausklick reduzieren und den Rest mit "send()" realisieren.
So ist es jetzt ganz passabel und auf jeden Fall schneller als wenn ich per Hand ein neues Spiel starte.
#NoTrayIcon
$aktiv = 0
$carom_path = "H:\Program Files\Carom3D\carom.exe"
HotKeySet("!ä", "_PracticeAgain")
While 1
$state = WinGetState("Carom3D","")
Select
Case $aktiv = 0
Run($carom_path)
WinWaitActive("Carom3D")
$aktiv = 1
_PracticeAgain()
Case $state = 0 And $aktiv = 1
ExitLoop
EndSelect
WEnd
Exit
Func _PracticeAgain()
MouseClick("left",540,180)
Send("E")
Send("{TAB}")
Send("K")
Send("{ENTER}")
EndFunc
Alles anzeigen
Ja Danke, das wars.
Da war die Hilfedatei etwas fehlleitend: run("filename"..) - richtig wäre hier also "Dateipfad".
Hallo,
schon komisch - hab ein Script vom PC aufs Notebook kopiert und dieses verweigert das Ausführen des Befehls "run()".
Hab probiert, ob es an der Autoit-Installation liegt (deinstalliert und neu aufgespielt). Adminrechte habe ich auch. Also mir ist das unerklärlich. Funktioniert mit keiner Datei, als Beispiel hab ich hier mal Trillian verwendet.
führt zur Fehlermeldung:
Zitat>Running: (3.1.1.0):C:\Programme\AutoIt3\autoit3.exe "C:\Dokumente und Einstellungen\Standard\Desktop\AU3-Scripte\
test_run.au3"
C:\Dokumente und Einstellungen\Standard\Desktop\AU3-Scripte\test_run.au3 (1) : ==> Unable to execute the external program.:
run("trillian.exe", "c:\Programme\Trillian\")
Das System kann die angegebene Datei nicht finden.
Selbstredend ist trillian.exe an dem angegebenen Pfad vorhanden und läßt sich händisch prroblemlos ausführen.
Hat irgendwer eine Erklärung dafür oder einen Vorschlag, wie ich das Problem weiter eingrenzen kann?
Ich denke, der einfachste Weg ist, in deine GUI ein Fenster einzubetten, indem du einen externen PDF-Reader aufrufst. Aber nicht Adobe, viel zu groß und zu träge. Ich empfehle dir dafür Foxit PDF Reader. Klein, flink und braucht nicht installiert zu werden.
Edit:
Foxit läßt sich per Kommandozeile mit Optionen aufrufen, habs nur kurz überflogen - hier findest du näheres dazu.
Edit 2: ![]()
Schau mal, vielleicht hilft dir das hier auch weiter.
Eddy_Erpel & @ bernd670
Danke für eure Tipps. Hab alles probiert. Aber leider ohne Erfolg.
Ich kapier nicht, wieso das Info-Tool ID's ausliest, auf diese aber nicht zugegriffen werden kann.
Und das nervt mich am meisten, dass ich nicht weiß warum es nicht geht.
Hallo,
diejenigen von euch, die auch Carom spielen, kennen sicher das Problem:
Beim Spiel im Practice-Mode muß nach Spielende wieder der Spieltyp und der Raum ausgewählt werden. Voreinstellungen sind nicht möglich.
Das wollte ich nun mittels eines Scripts automatisieren. Aber irgendwas mach ich wohl falsch :(. Das Script reagiert gar nicht auf die Control-Commands.
Ich hab es jetzt mit Mausklicks realisiert (und die Controls auskommentiert), würde es aber lieber mit den Controls machen.
Hier der Code:
#include <GUIConstants.au3>
$Form1 = GUICreate("carom Start", 226, 159, (@DesktopWidth-226)/2, (@DesktopHeight-159)/2 )
$start = GUICtrlCreateButton("Start Carom3D", 40, 32, 145, 33)
$escape = GUICtrlCreateButton("Abbrechen", 40, 88, 145, 33)
GUISetState(@SW_SHOW)
HotKeySet("!ä", "_CaromStart") ; "ägain" LOL
$aktiv = 0
While 1
$msg = GuiGetMsg()
$state = WinGetState("Carom3D", "")
Select
Case $msg = $GUI_EVENT_CLOSE Or $msg = $escape Or ($state = 0 And $aktiv > 0)
ExitLoop
Case $msg = $start ; Practice Mode
GUISetState(@SW_HIDE, $Form1)
Run("carom.exe", "H:\Program Files\Carom3D\")
WinWaitActive("Carom3D")
$aktiv = 1
_CaromStart()
EndSelect
WEnd
Exit
Func _CaromStart()
;>>>>>>>>>>>> Window Details <<<<<<<<<<<<<
;Title: Carom3D
;Class: Carom3D
;BUTTON: PRACTICE
;>>>>>>>>>>> Control Under Mouse <<<<<<<<<<<
;Control ID: 1026
;ClassNameNN: Button27
;ControlClick("Carom3D","",1026) ; Button PRACTICE
MouseClick("left",535,180)
;AUSWAHLFENSTER PRACTICE
;>>>>>>>>>>>> Window Details <<<<<<<<<<<<<
;Title:
;Class: #32770
;COMBO-BOX: GAME-TYP
;>>>>>>>>>>> Control Under Mouse <<<<<<<<<<<
;Control ID: 1013
;ClassNameNN: ComboBox1
;>>>>>>>>>>> Visible Window Text <<<<<<<<<<<
;Eight Ball
;ControlClick("","",1013) ; Combo-Box Gametyp ?? Ist das nötig, da ControlCommand(.."SelectString"..) folgt ??
MouseClick("left",360,275)
;ControlCommand("","",1013,"SelectString",'Eight Ball') ; Auswahl Spiel
MouseClick("left",365,325)
;COMBO-BOX: ROOM-TYP
;>>>>>>>>>>> Control Under Mouse <<<<<<<<<<<
;Control ID: 1014
;ClassNameNN: ComboBox2
;>>>>>>>>>>> Visible Window Text <<<<<<<<<<<
;Korean Room
;ControlClick("","",1014) ; Combo-Box Raumtyp ?? Ist das nötig, da ControlCommand(.."SelectString"..) folgt ??
MouseClick("left",360,325)
;ControlCommand("","",1014,"SelectString",'Korean Room') ; Auswahl Raum
MouseClick("left",360,385)
;BUTTON: OK
;>>>>>>>>>>> Control Under Mouse <<<<<<<<<<<
;Control ID: 1
;ClassNameNN: Button1
;Text: OK
;ControlClick("","",1) ; OK-Button
MouseClick("left",310,370)
EndFunc
Alles anzeigen
Die Ergebnisse von AutoitWindowInfo habe ich den jeweiligen Controls vorangestellt.
ZitatAutoIt Window Info ist gut, geht aber nicht weil autoit installiert sein muss sonst gehts ja nicht.
Muß es nicht. Ich hab es immer auf 'nem USB-Stick dabei und es funktioniert tadellos.
Hi,
gestern abend im Hotel hatte ich eh nix besseres zu tun, also hab ich mir noch mal die Feiertagsfunktion zu Gemüte geführt.
Ein 2-dimensionales Array muß ja nicht sein. Hab das ganze jetzt in einem eindimensionalen, sortierten Array [Datum $Delimiter Feiertag].
Hab auch noch einiges gekürzt.
Hier der Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Funktion _Feiertage($Jahr)
;
; gibt die Feiertage des übergebenen Jahres
; als sortiertes Array[TT.MM.JJJJ \ Feiertag] zurück
; (Trennzeichen veränderbar über Variable: $Delimiter)
;
; Autor BugFix (bug_fix@web.de)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include <math.au3>
#include <Date.au3>
#include <Array.au3>
Func _Feiertage($year)
Dim $4AdvDat, $3AdvDat, $2AdvDat, $1AdvDat, $TotSoDat, $BuBDat, $MutterDat, $ErnteDat, $tmp, $Delimiter = "\"
Dim $HDays[32]
;fixe Feiertage
$HDays[0] = $year & "/01/01" & $Delimiter & "Neujahr"
$HDays[1] = $year & "/01/06" & $Delimiter & "Heilige Drei Könige"
$HDays[2] = $year & "/02/14" & $Delimiter & "Valentinstag"
$HDays[3] = $year & "/05/01" & $Delimiter & "Maifeiertag"
$HDays[4] = $year & "/10/03" & $Delimiter & "Tag der Deutschen Einheit"
$HDays[5] = $year & "/10/31" & $Delimiter & "Reformationstag"
$HDays[6] = $year & "/11/01" & $Delimiter & "Allerheiligen"
$HDays[7] = $year & "/12/24" & $Delimiter & "Heiligabend"
$HDays[8] = $year & "/12/25" & $Delimiter & "1. Weihnachtsfeiertag"
$HDays[9] = $year & "/12/26" & $Delimiter & "2. Weihnachtsfeiertag"
$HDays[10] = $year & "/12/31" & $Delimiter & "Silvester"
;variable Feiertage
$aa = Mod($year, 19)
$bb = Mod($year, 4)
$cc = Mod($year, 7)
$H1 = Int($year / 100)
$H2 = Int($year / 400)
$N = 4 + $H1 - $H2
$MM = 15 + $H1 - $H2 - _Floor (Int((8 * $H1 + 13) / 25))
$dd = Mod((19 * $aa + $MM), 30)
$ee = Mod((2 * $bb + 4 * $cc + 6 * $dd + $N), 7)
If $dd + $ee = 35 Then
$Easter = 50
Else
If $dd = 28 And $ee = 6 And $aa > 10 Then
$Easter = 49
Else
$Easter = 22 + $dd + $ee
EndIf
EndIf
If $Easter < 32 Then
$EasterDay = $Easter
$EasterMonth = "03"
Else
$EasterDay = $Easter - 31
$EasterMonth = "04"
EndIf
If $EasterDay < 10 Then
$EasterDay = "0" & $EasterDay
EndIf
If $year < 1900 Then ;Datumsoperationen nur mgl. wenn > 1900 , Jahr wird konvertiert
$RestJahr = Mod($year, 100)
If _DateIsLeapYear($year) Then
If $RestJahr < 10 Then
$RestJahr = "0" & $RestJahr
EndIf
$Tempyear = 20 & $RestJahr
Else
If $RestJahr < 10 Then
$RestJahr = "0" & $RestJahr
EndIf
$Tempyear = 19 & $RestJahr
EndIf
$EasterDate = $Tempyear & "/" & $EasterMonth & "/" & $EasterDay
Else
$EasterDate = $year & "/" & $EasterMonth & "/" & $EasterDay
EndIf
$WFastDate = _DateAdd( 'd', -52, $EasterDate)
$RosDat = _DateAdd( 'd', -48, $EasterDate)
$FastDat = _DateAdd( 'd', -47, $EasterDate)
$AschDat = _DateAdd( 'd', -46, $EasterDate)
$GrDoDat = _DateAdd( 'd', -3, $EasterDate)
$KarDat = _DateAdd( 'd', -2, $EasterDate)
$OSaDat = _DateAdd( 'd', -1, $EasterDate)
$OSoDat = $EasterDate
$OMoDat = _DateAdd( 'd', 1, $EasterDate)
$HiFaDat = _DateAdd( 'd', 39, $EasterDate)
$PfSoDat = _DateAdd( 'd', 49, $EasterDate)
$PfMoDat = _DateAdd( 'd', 50, $EasterDate)
$FroDat = _DateAdd( 'd', 60, $EasterDate)
;Ermitteln nicht von Ostern abhängiger, veränderlicher Feiertage
;Muttertag = 2. Sonntag im Mai ABER wenn Pfingsten = 2.Sonntag im Mai dann ist Muttertag am 1. Sonntag
;Der 2. Sonntag kann nur zw. dem 8. u. 14.5. liegen
For $maitag = 8 To 14
If _DateToDayOfWeek($year, 5, $maitag) = 1 Then
If $maitag < 10 Then
$maitag = "0" & $maitag
EndIf
$MutterDat = $year & "/05/" & $maitag
If $MutterDat = $PfSoDat Then
$MutterDat = _DateAdd( 'd', -7, $year & "/05/" & $maitag)
EndIf
ExitLoop
EndIf
Next
;Erntedankfest 1. Sonntag im Oktober (zw. 1. u. 7.10.)
For $oktobertag = 1 To 7
If _DateToDayOfWeek($year, 10, $oktobertag) = 1 Then
$oktobertag = "0" & $oktobertag
$ErnteDat = $year & "/10/" & $oktobertag
ExitLoop
EndIf
Next
;4.Advent = Sonntag vor 25.12. (zw. 18. u. 24.12.)
For $deztag = 18 To 24
If _DateToDayOfWeek($year, 12, $deztag) = 1 Then
$4AdvDat = $year & "/12/" & $deztag
$3AdvDat = _DateAdd( 'd', -7, $4AdvDat)
$2AdvDat = _DateAdd( 'd', -14, $4AdvDat)
$1AdvDat = _DateAdd( 'd', -21, $4AdvDat)
$TotSoDat = _DateAdd( 'd', -28, $4AdvDat)
$BuBDat = _DateAdd( 'd', -32, $4AdvDat)
ExitLoop
EndIf
Next
$HDays[11] = $WFastDate & $Delimiter & "Weiberfastnacht"
$HDays[12] = $RosDat & $Delimiter & "Rosenmontag"
$HDays[13] = $FastDat & $Delimiter & "Fastnacht"
$HDays[14] = $AschDat & $Delimiter & "Aschermittwoch"
$HDays[15] = $GrDoDat & $Delimiter & "Gründonnerstag"
$HDays[16] = $KarDat & $Delimiter & "Karfreitag"
$HDays[17] = $OSaDat & $Delimiter & "Ostersamstag"
$HDays[18] = $OSoDat & $Delimiter & "Ostersonntag"
$HDays[19] = $OMoDat & $Delimiter & "Ostermontag"
$HDays[20] = $HiFaDat & $Delimiter & "Christi Himmelfahrt"
$HDays[21] = $PfSoDat & $Delimiter & "Pfingstsonntag"
$HDays[22] = $PfMoDat & $Delimiter & "Pfingstmontag"
$HDays[23] = $MutterDat & $Delimiter & "Muttertag"
$HDays[24] = $FroDat & $Delimiter & "Fronleichnam"
$HDays[25] = $ErnteDat & $Delimiter & "Erntedankfest"
$HDays[26] = $BuBDat & $Delimiter & "Buß- und Bettag"
$HDays[27] = $TotSoDat & $Delimiter & "Totensonntag"
$HDays[28] = $1AdvDat & $Delimiter & "1. Advent"
$HDays[29] = $2AdvDat & $Delimiter & "2. Advent"
$HDays[30] = $3AdvDat & $Delimiter & "3. Advent"
$HDays[31] = $4AdvDat & $Delimiter & "4. Advent"
_ArraySort($HDays)
;Datum konvertieren zu TT.MM.JJJJ
For $i = 0 To 31
$tmp = StringSplit($HDays[$i], $Delimiter)
$HDays[$i] = StringMid($tmp[1], 9) & "." & StringMid($tmp[1], 6, 2) & "." & StringMid($tmp[1], 1, 4) & $Delimiter & $tmp[2]
Next
Return $HDays
EndFunc ;==>_Feiertage
Alles anzeigen
Hi,
vielleicht kann man ja die Feiertage mit einbringen. Hab aus meinem Script mal 'ne Funktion gebastelt, die die Feiertage als Array[Datum][Feiertag] zurückgibt.
Bekomms nur nicht sortiert. ![]()
Aber vielleicht bekommt ihrs ja hin.
Meld mich erstmal für 10 Tag ab - Dienstfahrt.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Funktion _Feiertage($Jahr)
;
; gibt die Feiertage des übergebenen Jahres als Array[Datum][Feiertag] zurück
;
; Autor BugFix (bug_fix@web.de)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include <math.au3>
#include <Date.au3>
Func _Feiertage($year)
Dim $4AdvDat, $3AdvDat, $2AdvDat, $1AdvDat, $TotSoDat, $BuBDat, $MutterDat, $ErnteDat, $tmp
Dim $HDays[32][2]
;fixe Feiertage
$HDays[0][0] = "01.01." & $year
$HDays[0][1] = "Neujahr"
$HDays[1][0] = "06.01." & $year
$HDays[1][1] = "Heilige Drei Könige"
$HDays[2][0] = "14.02." & $year
$HDays[2][1] = "Valentinstag"
$HDays[3][0] = "01.05." & $year
$HDays[3][1] = "Maifeiertag"
$HDays[4][0] = "03.10." & $year
$HDays[4][1] = "Tag der Deutschen Einheit"
$HDays[5][0] = "31.10." & $year
$HDays[5][1] = "Reformationstag"
$HDays[6][0] = "01.11." & $year
$HDays[6][1] = "Allerheiligen"
$HDays[7][0] = "24.12." & $year
$HDays[7][1] = "Heiligabend"
$HDays[8][0] = "25.12." & $year
$HDays[8][1] = "1. Weihnachtsfeiertag"
$HDays[9][0] = "26.12." & $year
$HDays[9][1] = "2. Weihnachtsfeiertag"
$HDays[10][0] = "31.12." & $year
$HDays[10][1] = "Silvester"
;variable Feiertage
$aa = Mod($year, 19)
$bb = Mod($year, 4)
$cc = Mod($year, 7)
$H1 = Int($year / 100)
$H2 = Int($year / 400)
$N = 4 + $H1 - $H2
$MM = 15 + $H1 - $H2 - _Floor (Int((8 * $H1 + 13) / 25))
$dd = Mod((19 * $aa + $MM), 30)
$ee = Mod((2 * $bb + 4 * $cc + 6 * $dd + $N), 7)
If $dd + $ee = 35 Then
$Easter = 50
Else
If $dd = 28 And $ee = 6 And $aa > 10 Then
$Easter = 49
Else
$Easter = 22 + $dd + $ee
EndIf
EndIf
If $Easter < 32 Then
$EasterDay = $Easter
$EasterMonth = "03"
Else
$EasterDay = $Easter - 31
$EasterMonth = "04"
EndIf
If $EasterDay < 10 Then
$EasterDay = "0" & $EasterDay
EndIf
If $year < 1900 Then ;Datumsoperationen nur mgl. wenn > 1900 , Jahr wird konvertiert
$RestJahr = Mod($year, 100)
If _DateIsLeapYear($year) Then
If $RestJahr < 10 Then
$RestJahr = "0" & $RestJahr
EndIf
$Tempyear = 20 & $RestJahr
Else
If $RestJahr < 10 Then
$RestJahr = "0" & $RestJahr
EndIf
$Tempyear = 19 & $RestJahr
EndIf
$EasterDate = $Tempyear & "/" & $EasterMonth & "/" & $EasterDay
Else
$EasterDate = $year & "/" & $EasterMonth & "/" & $EasterDay
EndIf
$WFastDate = _DateAdd( 'd', -52, $EasterDate)
$RosDat = _DateAdd( 'd', -48, $EasterDate)
$FastDat = _DateAdd( 'd', -47, $EasterDate)
$AschDat = _DateAdd( 'd', -46, $EasterDate)
$GrDoDat = _DateAdd( 'd', -3, $EasterDate)
$KarDat = _DateAdd( 'd', -2, $EasterDate)
$OSaDat = _DateAdd( 'd', -1, $EasterDate)
$OSoDat = $EasterDate
$OMoDat = _DateAdd( 'd', 1, $EasterDate)
$HiFaDat = _DateAdd( 'd', 39, $EasterDate)
$PfSoDat = _DateAdd( 'd', 49, $EasterDate)
$PfMoDat = _DateAdd( 'd', 50, $EasterDate)
$FroDat = _DateAdd( 'd', 60, $EasterDate)
;Umstellen auf TT.MM.JJJJ
$WFastDate = StringMid($WFastDate, 9) & "." & StringMid($WFastDate, 6, 2) & "." & $year
$RosDat = StringMid($RosDat, 9) & "." & StringMid($RosDat, 6, 2) & "." & $year
$FastDat = StringMid($FastDat, 9) & "." & StringMid($FastDat, 6, 2) & "." & $year
$AschDat = StringMid($AschDat, 9) & "." & StringMid($AschDat, 6, 2) & "." & $year
$GrDoDat = StringMid($GrDoDat, 9) & "." & StringMid($GrDoDat, 6, 2) & "." & $year
$KarDat = StringMid($KarDat, 9) & "." & StringMid($KarDat, 6, 2) & "." & $year
$OSaDat = StringMid($OSaDat, 9) & "." & StringMid($OSaDat, 6, 2) & "." & $year
$OSoDat = StringMid($OSoDat, 9) & "." & StringMid($OSoDat, 6, 2) & "." & $year
$OMoDat = StringMid($OMoDat, 9) & "." & StringMid($OMoDat, 6, 2) & "." & $year
$HiFaDat = StringMid($HiFaDat, 9) & "." & StringMid($HiFaDat, 6, 2) & "." & $year
$PfSoDat = StringMid($PfSoDat, 9) & "." & StringMid($PfSoDat, 6, 2) & "." & $year
$PfMoDat = StringMid($PfMoDat, 9) & "." & StringMid($PfMoDat, 6, 2) & "." & $year
$FroDat = StringMid($FroDat, 9) & "." & StringMid($FroDat, 6, 2) & "." & $year
;Ermitteln nicht von Ostern abhängiger, veränderlicher Feiertage
;Muttertag = 2. Sonntag im Mai ABER wenn Pfingsten = 2.Sonntag im Mai dann ist Muttertag am 1. Sonntag
;Der 2. Sonntag kann nur zw. dem 8. u. 14.5. liegen
For $maitag = 8 To 14
If _DateToDayOfWeek($year, 5, $maitag) = 1 Then
If $maitag < 10 Then
$maitag = "0" & $maitag
EndIf
$MutterDat = $maitag & "." & "05." & $year
If $MutterDat = $PfSoDat Then
$MutterDat = _DateAdd( 'd', -7, $year & "/05/" & $maitag)
$MutterDat = StringMid($MutterDat, 9) & "." & StringMid($MutterDat, 6, 2) & "." & StringMid($MutterDat, 1, 4)
EndIf
ExitLoop
EndIf
Next
;Erntedankfest 1. Sonntag im Oktober (zw. 1. u. 7.10.)
For $oktobertag = 1 To 7
If _DateToDayOfWeek($year, 10, $oktobertag) = 1 Then
$oktobertag = "0" & $oktobertag
$ErnteDat = $oktobertag & "." & "10." & $year
ExitLoop
EndIf
Next
;4.Advent = Sonntag vor 25.12. (zw. 18. u. 24.12.)
For $deztag = 18 To 24
If _DateToDayOfWeek($year, 12, $deztag) = 1 Then
$4AdvDat = $year & "/12/" & $deztag
$3AdvDat = _DateAdd( 'd', -7, $4AdvDat)
$2AdvDat = _DateAdd( 'd', -14, $4AdvDat)
$1AdvDat = _DateAdd( 'd', -21, $4AdvDat)
$TotSoDat = _DateAdd( 'd', -28, $4AdvDat)
$BuBDat = _DateAdd( 'd', -32, $4AdvDat)
ExitLoop
EndIf
Next
$tmp = StringMid($4AdvDat, 9) & "." & StringMid($4AdvDat, 6, 2) & "." & StringMid($4AdvDat, 1, 4)
$4AdvDat = StringMid($tmp, 1, 6) & $year
$tmp = StringMid($3AdvDat, 9) & "." & StringMid($3AdvDat, 6, 2) & "." & StringMid($3AdvDat, 1, 4)
$3AdvDat = StringMid($tmp, 1, 6) & $year
$tmp = StringMid($2AdvDat, 9) & "." & StringMid($2AdvDat, 6, 2) & "." & StringMid($2AdvDat, 1, 4)
$2AdvDat = StringMid($tmp, 1, 6) & $year
$tmp = StringMid($1AdvDat, 9) & "." & StringMid($1AdvDat, 6, 2) & "." & StringMid($1AdvDat, 1, 4)
$1AdvDat = StringMid($tmp, 1, 6) & $year
$TotSoDat = StringMid($TotSoDat, 9) & "." & StringMid($TotSoDat, 6, 2) & "." & StringMid($TotSoDat, 1, 4)
$BuBDat = StringMid($BuBDat, 9) & "." & StringMid($BuBDat, 6, 2) & "." & StringMid($BuBDat, 1, 4)
;Übergabe an Array
$HDays[11][0] = $WFastDate
$HDays[11][1] = "Weiberfastnacht"
$HDays[12][0] = $RosDat
$HDays[12][1] = "Rosenmontag"
$HDays[13][0] = $FastDat
$HDays[13][1] = "Fastnacht"
$HDays[14][0] = $AschDat
$HDays[14][1] = "Aschermittwoch"
$HDays[15][0] = $GrDoDat
$HDays[15][1] = "Gründonnerstag"
$HDays[16][0] = $KarDat
$HDays[16][1] = "Karfreitag"
$HDays[17][0] = $OSaDat
$HDays[17][1] = "Ostersamstag"
$HDays[18][0] = $OSoDat
$HDays[18][1] = "Ostersonntag"
$HDays[19][0] = $OMoDat
$HDays[19][1] = "Ostermontag"
$HDays[20][0] = $HiFaDat
$HDays[20][1] = "Christi Himmelfahrt"
$HDays[21][0] = $PfSoDat
$HDays[21][1] = "Pfingstsonntag"
$HDays[22][0] = $PfMoDat
$HDays[22][1] = "Pfingstmontag"
$HDays[23][0] = $MutterDat
$HDays[23][1] = "Muttertag"
$HDays[24][0] = $FroDat
$HDays[24][1] = "Fronleichnam"
$HDays[25][0] = $ErnteDat
$HDays[25][1] = "Erntedankfest"
$HDays[26][0] = $BuBDat
$HDays[26][1] = "Buß- und Bettag"
$HDays[27][0] = $TotSoDat
$HDays[27][1] = "Totensonntag"
$HDays[28][0] = $1AdvDat
$HDays[28][1] = "1. Advent"
$HDays[29][0] = $2AdvDat
$HDays[29][1] = "2. Advent"
$HDays[30][0] = $3AdvDat
$HDays[30][1] = "3. Advent"
$HDays[31][0] = $4AdvDat
$HDays[31][1] = "4. Advent"
Return $HDays
EndFunc ;==>_Feiertage()
Alles anzeigen
So, nun noch zum Abschluß die bereinigte, etwas 'verschönte' und fehlerfrei laufende Version.
Danke nochmal für eure Tipps! :tassen:
#include <GUIConstants.au3>
#include <GuiList.au3>
#NoTrayIcon
Const $RegKey="HKEY_CURRENT_USER\Software\Microsoft\Shared Tools\Outlook\Journaling\"
$Form1 = GUICreate("Outlook Journal-Eintragstyp", 552, 304, -1, -1)
GUISetBkColor(0xFFF8DC)
$Group1 = GUICtrlCreateGroup("Vorhandene Journaltypen", 20, 15, 341, 266)
GUICtrlSetColor(-1, 0x0000FF)
$List1 = GUICtrlCreateList("", 35, 37, 311, 245, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button_restore = GUICtrlCreateButton("&Wiederherstellen", 390, 65, 136, 30)
$Button_add = GUICtrlCreateButton("Eintrag &hinzufügen", 390, 125, 136, 30)
GUICtrlSetState(-1, $GUI_FOCUS)
$Button_del = GUICtrlCreateButton("Markierten Eintrag &löschen", 390, 185, 136, 30)
$Button_end = GUICtrlCreateButton("&Ende", 390, 245, 136, 30)
$Form2 = GUICreate("Neuen Eintragstyp hinzufügen", 377, 151, -1, -1)
GUISetBkColor(0xFFF8DC)
$Group2 = GUICtrlCreateGroup("Eintragstyp", 30, 15, 311, 66)
GUICtrlSetColor(-1, 0x0000FF)
$Input1 = GUICtrlCreateInput("", 40, 40, 291, 26, -1, BitOR($SS_CENTER, $WS_EX_CLIENTEDGE))
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button_cancel2 = GUICtrlCreateButton("&Abbrechen", 30, 95, 121, 26)
$Button_add_back = GUICtrlCreateButton("&Hinzufügen", 220, 95, 121, 26)
$Form3 = GUICreate("Achtung!", 531, 96, -1, -1)
GUISetBkColor(0xFFF8DC)
GUICtrlCreateLabel("Achtung! Der Registry-Schlüssel wird gelöscht! Ein Backup wird erstellt.", 20, 15, 492, 30, BitOR($SS_CENTER,$SS_CENTERIMAGE,$SS_SUNKEN))
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xff0000)
GUICtrlSetColor(-1, 0xFFFF00)
GUICtrlSetState(-1, $GUI_DISABLE)
$Button_deltrue = GUICtrlCreateButton("&Löschen", 20, 55, 85, 25)
$Button_delfalse = GUICtrlCreateButton("&Nicht Löschen", 426, 55, 85, 25)
$Form4 = GUICreate("Gelöschte Einträge wiederherstellen", 552, 304, -1, -1)
GUISetBkColor(0xFFF8DC)
$Group4 = GUICtrlCreateGroup("Vorhandene Backups", 20, 15, 341, 266)
GUICtrlSetColor(-1, 0x0000FF)
$List4 = GUICtrlCreateList("", 35, 37, 311, 245, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button_restore_back = GUICtrlCreateButton("Eintrag &wiederherstellen", 390, 185, 136, 30)
$Button_cancel4 = GUICtrlCreateButton("&Abbrechen", 390, 245, 136, 30)
If FileExists(@ScriptDir & "\outlk_key.ini") Then
GUICtrlSetState($Button_restore, $GUI_SHOW)
Else
GUICtrlSetState($Button_restore, $GUI_HIDE)
EndIf
GUISetState(@SW_SHOW, $Form1)
_ReadSubKeyRefreshList()
While 1
$msg = GuiGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE Or $msg = $Button_end
ExitLoop
Case $msg = $Button_add
GUISetState(@SW_HIDE, $Form1)
GUISetState(@SW_SHOW, $Form2)
GUICtrlSetState($Input1, $GUI_FOCUS)
Case $msg = $Button_del
GUISetState(@SW_HIDE, $Form1)
GUISetState(@SW_SHOW, $Form3)
GUICtrlSetState($Button_delfalse, $GUI_FOCUS)
Case $msg = $Button_deltrue
$EntryDel = GUICtrlRead($List1)
If $EntryDel <> "" Then
_GetKeyToBackupINI()
RegDelete($RegKey&$EntryDel)
GUICtrlSetState($Button_restore, $GUI_SHOW)
Else
MsgBox(0, "Achtung!", "Es wurde kein Eintrag ausgewählt.")
EndIf
GUISetState(@SW_HIDE, $Form3)
GUISetState(@SW_SHOW, $Form1)
_ReadSubKeyRefreshList()
Case $msg = $Button_delfalse
GUISetState(@SW_HIDE, $Form3)
GUISetState(@SW_SHOW, $Form1)
Case $msg = $Button_add_back
$NewEntry = GUICtrlRead($Input1)
If _GUICtrlListSelectString($List1, $NewEntry, -1) = $LB_ERR Then
If $NewEntry <> "" Then
_AddKeys4NewEntry($NewEntry)
GUICtrlSetData($Input1, "")
GUISetState(@SW_SHOW, $Form1)
GUISetState(@SW_HIDE, $Form2)
_ReadSubKeyRefreshList()
Else
MsgBox(0, "Achtung!", "Kein neuer Eintrag erstellt!")
EndIf
Else
MsgBox(0, "Achtung!", "Eintrag existiert bereits!")
GUICtrlSetState($Input1, $GUI_FOCUS)
EndIf
Case $msg = $Button_cancel2
GUISetState(@SW_HIDE, $Form2)
GUISetState(@SW_SHOW, $Form1)
Case $msg = $Button_restore
GUISetState(@SW_HIDE, $Form1)
GUISetState(@SW_SHOW, $Form4)
_BackupList()
Case $msg = $Button_cancel4
GUISetState(@SW_HIDE, $Form4)
GUISetState(@SW_SHOW, $Form1)
Case $msg = $Button_restore_back
$EntryRestore = GUICtrlRead($List4)
If $EntryRestore <> "" Then
_RestoreKeyFromBackupINI()
IniDelete(@ScriptDir & "\outlk_key.ini", $EntryRestore)
If FileGetSize(@ScriptDir & "\outlk_key.ini") = 0 Then
FileDelete(@ScriptDir & "\outlk_key.ini")
GUICtrlSetState($Button_restore, $GUI_HIDE)
EndIf
$EntryRestore = ""
GUISetState(@SW_HIDE, $Form4)
GUISetState(@SW_SHOW, $Form1)
_ReadSubKeyRefreshList()
Else
MsgBox(0, "Achtung!", "Kein Eintrag zur Wiederherstellung ausgewählt.")
EndIf
EndSelect
WEnd
Exit
#region ; Funktionen
Func _ReadSubKeyRefreshList()
Dim $i=0
Dim $Wert, $Fehler=0
GUICtrlSetData($List1,"")
Do
$i+=1
$Wert=RegEnumKey($RegKey, $i)
$Fehler=@Error
If $Fehler=0 Then
GUICtrlSetData($List1, $Wert)
EndIf
Until $Fehler<>0
EndFunc
Func _AddKeys4NewEntry($NewEntry)
RegWrite($RegKey&$NewEntry, "AutoJournaled", "REG_DWORD" , 00000000)
RegWrite($RegKey&$NewEntry, "JournalByContact", "REG_DWORD" , 00000000)
RegWrite($RegKey&$NewEntry, "Large Icon", "REG_SZ" , "[8]")
RegWrite($RegKey&$NewEntry, "Small Icon", "REG_SZ" , "[8]")
RegWrite($RegKey&$NewEntry, "Description", "REG_SZ" , $NewEntry)
EndFunc
Func _GetKeyToBackupINI()
Dim $RegTypes[8]
$RegTypes[1] = "REG_SZ"
$RegTypes[2] = "REG_EXPAND_SZ"
$RegTypes[3] = "REG_BINARY"
$RegTypes[4] = "REG_DWORD"
$RegTypes[5] = ""
$RegTypes[6] = ""
$RegTypes[7] = "REG_MULTI_SZ"
Dim $i = 0
Dim $Wert, $val, $Fehler = 0
Do
$i+=1
$Wert = RegEnumVal($RegKey&$EntryDel, $i)
$Fehler = @Error
If $Fehler = 0 Then
$val = RegRead($RegKey&$EntryDel, $Wert)
IniWrite ( @ScriptDir & "\outlk_key.ini", $EntryDel, $Wert, $val & ";" & $RegTypes[@extended] )
Sleep(50)
EndIf
Until $Fehler <> 0
EndFunc
Func _RestoreKeyFromBackupINI()
$INISection = IniReadSection(@ScriptDir & "\outlk_key.ini", $EntryRestore)
If UBound($INISection,0) <> 2 Then
MsgBox(0, "Achtung!", "Sicherung <" & $EntryRestore & "> existiert nicht!.")
Else
For $i = 1 To $INISection[0][0]
$StrSplit = StringSplit($INISection[$i][1],";")
RegWrite($RegKey&$EntryRestore, $INISection[$i][0], $StrSplit[2], $StrSplit[1])
Sleep(50)
Next
EndIf
EndFunc
Func _BackupList()
GUICtrlSetData($List4, "")
$var = IniReadSectionNames(@ScriptDir & "\outlk_key.ini")
If @error Then
MsgBox(0, "Achtung!", "Keine gesicherten Einträge vorhanden.")
Else
For $i = 1 To $var[0]
GUICtrlSetData($List4, $var[$i])
Next
EndIf
EndFunc
#endregion
Alles anzeigen
ZitatWieso Brasilien und nicht DE?
Weil sie die "cool" findet. :tongue:
Ich glaube die Deutschen haben bei ihr keine Chance, weil Kahn in der Mannschaft ist und den findet sie (Originalton) "doof".
Hi, ich will es euch nicht ersparen ![]()
mein allererstes Script, dass in autoit entstand.
Hintergrund:
Eigentlich wollte ich nur die Zellersche Formel zur Wochentagsbestimmung mal testen und auch die Osterformel von C.F. Gauss.
Entstanden ist das folgende Produkt:
; ----------------------------------------------------------------------------
;
; AutoIt Version: 3.1.0
;
;Osterformel (Gauss)
; a = Jahr mod 19
; b = Jahr mod 4
; c = Jahr mod 7
; H1 = Jahr div 100
; H2 = Jahr div 400
; N = 4 + H1 - H2
; M = 15 + H1 - H2 - [(8 * H1 + 13) div 25]
; d = (19 * a + M) mod 30
; e = (2 * b + 4 * c + 6 * d + N) mod 7
;wenn d + e = 35, dann ostern = 50
;wenn d = 28 und e = 6 und a > 10, dann ostern = 49
;in allen anderen Fällen: ostern = 22 + d + e
;ostern: Ostersonntag als Märzdatum
;
; ----------------------------------------------------------------------------
#include <GuiConstants.au3>
#include <Date.au3>
#include <math.au3>
GUICreate("Wochen- und Feiertagsbestimmung", 680, 485, (@DesktopWidth - 680) / 2, (@DesktopHeight - 485) / 2)
GUISetBkColor(0xFFFACD)
$Label_1 = GUICtrlCreateLabel("Bestimmen Sie den Wochentag ! (gültig: 1583 - 8201)", 200, 10, 280, 20)
GUICtrlSetColor($Label_1, 0xFF0000)
$aktDatum = GUICtrlCreateLabel(_NowNormDate(), 620, 10, 60, 20)
;Gruppe Optionsfelder zur Datumsauswahl
$Group_T = GUICtrlCreateGroup("Tag", 15, 25, 650, 60)
$R1 = GUICtrlCreateRadio("01", 20, 45, 30, 15)
GUICtrlSetState($R1, $gui_checked)
$R2 = GUICtrlCreateRadio("02", 60, 45, 30, 15)
$R3 = GUICtrlCreateRadio("03", 100, 45, 30, 15)
$R4 = GUICtrlCreateRadio("04", 140, 45, 30, 15)
$R5 = GUICtrlCreateRadio("05", 180, 45, 30, 15)
$R6 = GUICtrlCreateRadio("06", 220, 45, 30, 15)
$R7 = GUICtrlCreateRadio("07", 260, 45, 30, 15)
$R8 = GUICtrlCreateRadio("08", 300, 45, 30, 15)
$R9 = GUICtrlCreateRadio("09", 340, 45, 30, 15)
$R10 = GUICtrlCreateRadio("10", 380, 45, 30, 15)
$R11 = GUICtrlCreateRadio("11", 420, 45, 30, 15)
$R12 = GUICtrlCreateRadio("12", 460, 45, 30, 15)
$R13 = GUICtrlCreateRadio("13", 500, 45, 30, 15)
$R14 = GUICtrlCreateRadio("14", 540, 45, 30, 15)
$R15 = GUICtrlCreateRadio("15", 580, 45, 30, 15)
$R16 = GUICtrlCreateRadio("16", 20, 60, 30, 15)
$R17 = GUICtrlCreateRadio("17", 60, 60, 30, 15)
$R18 = GUICtrlCreateRadio("18", 100, 60, 30, 15)
$R19 = GUICtrlCreateRadio("19", 140, 60, 30, 15)
$R20 = GUICtrlCreateRadio("20", 180, 60, 30, 15)
$R21 = GUICtrlCreateRadio("21", 220, 60, 30, 15)
$R22 = GUICtrlCreateRadio("22", 260, 60, 30, 15)
$R23 = GUICtrlCreateRadio("23", 300, 60, 30, 15)
$R24 = GUICtrlCreateRadio("24", 340, 60, 30, 15)
$R25 = GUICtrlCreateRadio("25", 380, 60, 30, 15)
$R26 = GUICtrlCreateRadio("26", 420, 60, 30, 15)
$R27 = GUICtrlCreateRadio("27", 460, 60, 30, 15)
$R28 = GUICtrlCreateRadio("28", 500, 60, 30, 15)
$R29 = GUICtrlCreateRadio("29", 540, 60, 30, 15)
$R30 = GUICtrlCreateRadio("30", 580, 60, 30, 15)
$R31 = GUICtrlCreateRadio("31", 620, 60, 30, 15)
$Group_M = GUICtrlCreateGroup("Monat", 15, 100, 255, 60)
$R1m = GUICtrlCreateRadio("01", 20, 120, 30, 15)
GUICtrlSetState($R1m, $gui_checked)
$R2m = GUICtrlCreateRadio("02", 60, 120, 30, 15)
$R3m = GUICtrlCreateRadio("03", 100, 120, 30, 15)
$R4m = GUICtrlCreateRadio("04", 140, 120, 30, 15)
$R5m = GUICtrlCreateRadio("05", 180, 120, 30, 15)
$R6m = GUICtrlCreateRadio("06", 220, 120, 30, 15)
$R7m = GUICtrlCreateRadio("07", 20, 135, 30, 15)
$R8m = GUICtrlCreateRadio("08", 60, 135, 30, 15)
$R9m = GUICtrlCreateRadio("09", 100, 135, 30, 15)
$R10m = GUICtrlCreateRadio("10", 140, 135, 30, 15)
$R11m = GUICtrlCreateRadio("11", 180, 135, 30, 15)
$R12m = GUICtrlCreateRadio("12", 220, 135, 30, 15)
$L_MsgTag = GUICtrlCreateLabel("", 340, 100, 200, 20)
GUICtrlSetColor($L_MsgTag, 0xFF0000)
$Label_4 = GUICtrlCreateLabel("Jahr", 340, 122, 40, 20)
$But_minus = GUICtrlCreateButton("-", 406, 123, 15, 15)
$But_plus = GUICtrlCreateButton("+", 468, 123, 15, 15)
$Input_7 = GUICtrlCreateInput(StringMid(_NowCalcDate(), 1, 4), 425, 120, 40, 20)
$Button_8 = GUICtrlCreateButton("Start", 615, 105, 50, 20)
$Ende = GUICtrlCreateButton("Ende", 615, 145, 50, 20)
$L_Schaltjahr = GUICtrlCreateLabel("", 500, 122, 80, 20)
$Label_9 = GUICtrlCreateLabel("Wochentag:", 340, 145, 90, 20)
$Label_10 = GUICtrlCreateLabel("", 417, 145, 90, 20)
$L_Feiertage = GUICtrlCreateLabel("Die Feiertage dieses Jahres", 265, 175, 150, 20)
$L_Fix = GUICtrlCreateLabel("Unveränderlich:", 70, 200, 90, 20)
$L_Variabel = GUICtrlCreateLabel("Veränderlich (gültig: 1583 - 2999):", 380, 200, 170, 20)
GUICtrlSetColor($L_Feiertage, 0xFF0000)
GUICtrlSetColor($L_Fix, 0xFF0000)
GUICtrlSetColor($L_Variabel, 0xFF0000)
GUICtrlSetColor($L_Schaltjahr, 0x0000ff)
GUICtrlSetColor($Label_10, 0xFF0000)
; Fixe Feiertage:
$L_Neuj = GUICtrlCreateLabel("Neujahr", 80, 220, 90, 20)
$L_NeujDat = GUICtrlCreateLabel("01.01.", 230, 220, 70, 20)
$WD_N = GUICtrlCreateLabel("", 275, 220, 60, 20)
$L_3K = GUICtrlCreateLabel("Heilige Drei Könige", 80, 235, 110, 20)
$L_3KDat = GUICtrlCreateLabel("06.01.", 230, 235, 70, 20)
$WD_3K = GUICtrlCreateLabel("", 275, 235, 60, 20)
$L_Val = GUICtrlCreateLabel("Valentinstag", 80, 250, 110, 20)
$L_ValDat = GUICtrlCreateLabel("14.02.", 230, 250, 70, 20)
$WD_Val = GUICtrlCreateLabel("", 275, 250, 60, 20)
$L_Mai = GUICtrlCreateLabel("Maifeiertag", 80, 265, 110, 20)
$L_MaiDat = GUICtrlCreateLabel("01.05.", 230, 265, 70, 20)
$WD_Mai = GUICtrlCreateLabel("", 275, 265, 60, 20)
$L_Einheit = GUICtrlCreateLabel("Tag der Deutschen Einheit", 80, 280, 145, 20)
$L_EinheitDat = GUICtrlCreateLabel("03.10.", 230, 280, 70, 20)
$WD_Einheit = GUICtrlCreateLabel("", 275, 280, 60, 20)
$L_Ref = GUICtrlCreateLabel("Reformationstag", 80, 295, 145, 20)
$L_RefDat = GUICtrlCreateLabel("31.10.", 230, 295, 70, 20)
$WD_Ref = GUICtrlCreateLabel("", 275, 295, 60, 20)
$L_Aller = GUICtrlCreateLabel("Allerheiligen", 80, 310, 145, 20)
$L_AllerDat = GUICtrlCreateLabel("01.11.", 230, 310, 70, 20)
$WD_Aller = GUICtrlCreateLabel("", 275, 310, 60, 20)
$L_HlA = GUICtrlCreateLabel("Heiligabend", 80, 325, 145, 20)
$L_HlADat = GUICtrlCreateLabel("24.12.", 230, 325, 70, 20)
$WD_Heil = GUICtrlCreateLabel("", 275, 325, 60, 20)
$L_1WT = GUICtrlCreateLabel("1. Weihnachtsfeiertag", 80, 340, 145, 20)
$L_1WTDat = GUICtrlCreateLabel("25.12.", 230, 340, 70, 20)
$WD_1W = GUICtrlCreateLabel("", 275, 340, 60, 20)
$L_2WT = GUICtrlCreateLabel("2. Weihnachtsfeiertag", 80, 355, 145, 20)
$L_2WTDat = GUICtrlCreateLabel("26.12.", 230, 355, 70, 20)
$WD_2W = GUICtrlCreateLabel("", 275, 355, 60, 20)
$L_Sil = GUICtrlCreateLabel("Silvester", 80, 370, 145, 20)
$L_SilDat = GUICtrlCreateLabel("31.12.", 230, 370, 70, 20)
$WD_Sil = GUICtrlCreateLabel("", 275, 370, 60, 20)
$L_Advent = GUICtrlCreateLabel("Adventstage:", 185, 420, 80, 20)
GUICtrlSetColor($L_Advent, 0xFF0000)
$L_1Adv = GUICtrlCreateLabel("1. Advent", 80, 440, 60, 20)
$L_1AdvDat = GUICtrlCreateLabel("", 90, 460, 40, 20)
$L_2Adv = GUICtrlCreateLabel("2. Advent", 150, 440, 60, 20)
$L_2AdvDat = GUICtrlCreateLabel("", 160, 460, 40, 20)
$L_3Adv = GUICtrlCreateLabel("3. Advent", 220, 440, 60, 20)
$L_3AdvDat = GUICtrlCreateLabel("", 230, 460, 40, 20)
$L_4Adv = GUICtrlCreateLabel("4. Advent", 290, 440, 60, 20)
$L_4AdvDat = GUICtrlCreateLabel("", 300, 460, 40, 20)
GUICtrlSetColor($L_1AdvDat, 0x0000ff)
GUICtrlSetColor($L_2AdvDat, 0x0000ff)
GUICtrlSetColor($L_3AdvDat, 0x0000ff)
GUICtrlSetColor($L_4AdvDat, 0x0000ff)
; Variable Feiertage:
$L_WFast = GUICtrlCreateLabel("Weiberfastnacht", 390, 220, 145, 20)
$L_WFastDate = GUICtrlCreateLabel("", 550, 220, 70, 20)
$L_Ros = GUICtrlCreateLabel("Rosenmontag", 390, 235, 145, 20)
$L_RosDat = GUICtrlCreateLabel("", 550, 235, 70, 20)
$L_Fast = GUICtrlCreateLabel("Fastnacht", 390, 250, 145, 20)
$L_FastDat = GUICtrlCreateLabel("", 550, 250, 70, 20)
$L_Asch = GUICtrlCreateLabel("Aschermittwoch", 390, 265, 145, 20)
$L_AschDat = GUICtrlCreateLabel("", 550, 265, 70, 20)
$L_GrDo = GUICtrlCreateLabel("Gründonnerstag", 390, 280, 145, 20)
$L_GrDoDat = GUICtrlCreateLabel("", 550, 280, 70, 20)
$L_Kar = GUICtrlCreateLabel("Karfreitag", 390, 295, 145, 20)
$L_KarDat = GUICtrlCreateLabel("", 550, 295, 70, 20)
$L_OSa = GUICtrlCreateLabel("Ostersamstag", 390, 310, 145, 20)
$L_OSaDat = GUICtrlCreateLabel("", 550, 310, 70, 20)
$L_OSo = GUICtrlCreateLabel("Ostersonntag", 390, 325, 145, 20)
$L_OSoDat = GUICtrlCreateLabel("", 550, 325, 70, 20)
$L_OMo = GUICtrlCreateLabel("Ostermontag", 390, 340, 145, 20)
$L_OMoDat = GUICtrlCreateLabel("", 550, 340, 70, 20)
$L_HiFa = GUICtrlCreateLabel("Christi Himmelfahrt", 390, 355, 145, 20)
$L_HiFaDat = GUICtrlCreateLabel("", 550, 355, 70, 20)
$L_Mutter = GUICtrlCreateLabel("Muttertag", 390, 370, 145, 20)
$L_MutterDat = GUICtrlCreateLabel("", 550, 370, 70, 20)
$L_PfSo = GUICtrlCreateLabel("Pfingstsonntag", 390, 385, 145, 20)
$L_PfSoDat = GUICtrlCreateLabel("", 550, 385, 70, 20)
$L_PfMo = GUICtrlCreateLabel("Pfingstmontag", 390, 400, 145, 20)
$L_PfMoDat = GUICtrlCreateLabel("", 550, 400, 70, 20)
$L_Fro = GUICtrlCreateLabel("Fronleichnam", 390, 415, 145, 20)
$L_FroDat = GUICtrlCreateLabel("", 550, 415, 70, 20)
$L_Ernte = GUICtrlCreateLabel("Erntedankfest", 390, 430, 145, 20)
$L_ErnteDat = GUICtrlCreateLabel("", 550, 430, 70, 20)
$L_BuB = GUICtrlCreateLabel("Buß- und Bettag", 390, 445, 145, 20)
$L_BuBDat = GUICtrlCreateLabel("", 550, 445, 70, 20)
$L_TotSo = GUICtrlCreateLabel("Totensonntag", 390, 460, 145, 20)
$L_TotSoDat = GUICtrlCreateLabel("", 550, 460, 70, 20)
GUISetState()
While 1
$msg = GUIGetMsg()
If $msg = $But_minus Then
GUICtrlSetData($Input_7, GUICtrlRead($Input_7) - 1)
EndIf
If $msg = $But_plus Then
GUICtrlSetData($Input_7, GUICtrlRead($Input_7) + 1)
EndIf
If $msg = $Button_8 Then
GUICtrlSetData($L_MsgTag, "")
GUICtrlSetData($L_Schaltjahr, "")
GUICtrlSetData($L_WFastDate, "")
GUICtrlSetData($L_RosDat, "")
GUICtrlSetData($L_FastDat, "")
GUICtrlSetData($L_AschDat, "")
GUICtrlSetData($L_GrDoDat, "")
GUICtrlSetData($L_KarDat, "")
GUICtrlSetData($L_OSaDat, "")
GUICtrlSetData($L_OSoDat, "")
GUICtrlSetData($L_OMoDat, "")
GUICtrlSetData($L_HiFaDat, "")
GUICtrlSetData($L_PfSoDat, "")
GUICtrlSetData($L_MutterDat, "")
GUICtrlSetData($L_PfMoDat, "")
GUICtrlSetData($L_FroDat, "")
GUICtrlSetData($L_ErnteDat, "")
GUICtrlSetData($L_TotSoDat, "")
GUICtrlSetData($L_BuBDat, "")
GUICtrlSetData($Label_10, "")
GUICtrlSetData($WD_N, "")
GUICtrlSetData($WD_3K, "")
GUICtrlSetData($WD_Val, "")
GUICtrlSetData($WD_Mai, "")
GUICtrlSetData($WD_Einheit, "")
GUICtrlSetData($WD_Ref, "")
GUICtrlSetData($WD_Aller, "")
GUICtrlSetData($WD_Heil, "")
GUICtrlSetData($WD_1W, "")
GUICtrlSetData($WD_2W, "")
GUICtrlSetData($WD_Sil, "")
GUICtrlSetData($L_1AdvDat, "")
GUICtrlSetData($L_2AdvDat, "")
GUICtrlSetData($L_3AdvDat, "")
GUICtrlSetData($L_4AdvDat, "")
$day1 = GUICtrlRead($R1)
$day2 = GUICtrlRead($R2)
$day3 = GUICtrlRead($R3)
$day4 = GUICtrlRead($R4)
$day5 = GUICtrlRead($R5)
$day6 = GUICtrlRead($R6)
$day7 = GUICtrlRead($R7)
$day8 = GUICtrlRead($R8)
$day9 = GUICtrlRead($R9)
$day10 = GUICtrlRead($R10)
$day11 = GUICtrlRead($R11)
$day12 = GUICtrlRead($R12)
$day13 = GUICtrlRead($R13)
$day14 = GUICtrlRead($R14)
$day15 = GUICtrlRead($R15)
$day16 = GUICtrlRead($R16)
$day17 = GUICtrlRead($R17)
$day18 = GUICtrlRead($R18)
$day19 = GUICtrlRead($R19)
$day20 = GUICtrlRead($R20)
$day21 = GUICtrlRead($R21)
$day22 = GUICtrlRead($R22)
$day23 = GUICtrlRead($R23)
$day24 = GUICtrlRead($R24)
$day25 = GUICtrlRead($R25)
$day26 = GUICtrlRead($R26)
$day27 = GUICtrlRead($R27)
$day28 = GUICtrlRead($R28)
$day29 = GUICtrlRead($R29)
$day30 = GUICtrlRead($R30)
$day31 = GUICtrlRead($R31)
$mon1 = GUICtrlRead($R1m)
$mon2 = GUICtrlRead($R2m)
$mon3 = GUICtrlRead($R3m)
$mon4 = GUICtrlRead($R4m)
$mon5 = GUICtrlRead($R5m)
$mon6 = GUICtrlRead($R6m)
$mon7 = GUICtrlRead($R7m)
$mon8 = GUICtrlRead($R8m)
$mon9 = GUICtrlRead($R9m)
$mon10 = GUICtrlRead($R10m)
$mon11 = GUICtrlRead($R11m)
$mon12 = GUICtrlRead($R12m)
Select
Case $day1 = 1
$D = 1
Case $day2 = 1
$D = 2
Case $day3 = 1
$D = 3
Case $day4 = 1
$D = 4
Case $day5 = 1
$D = 5
Case $day6 = 1
$D = 6
Case $day7 = 1
$D = 7
Case $day8 = 1
$D = 8
Case $day9 = 1
$D = 9
Case $day10 = 1
$D = 10
Case $day11 = 1
$D = 11
Case $day12 = 1
$D = 12
Case $day13 = 1
$D = 13
Case $day14 = 1
$D = 14
Case $day15 = 1
$D = 15
Case $day16 = 1
$D = 16
Case $day17 = 1
$D = 17
Case $day18 = 1
$D = 18
Case $day19 = 1
$D = 19
Case $day20 = 1
$D = 20
Case $day21 = 1
$D = 21
Case $day22 = 1
$D = 22
Case $day23 = 1
$D = 23
Case $day24 = 1
$D = 24
Case $day25 = 1
$D = 25
Case $day26 = 1
$D = 26
Case $day27 = 1
$D = 27
Case $day28 = 1
$D = 28
Case $day29 = 1
$D = 29
Case $day30 = 1
$D = 30
Case $day31 = 1
$D = 31
EndSelect
Select
Case $mon1 = 1
$mon = 1
Case $mon2 = 1
$mon = 2
Case $mon3 = 1
$mon = 3
Case $mon4 = 1
$mon = 4
Case $mon5 = 1
$mon = 5
Case $mon6 = 1
$mon = 6
Case $mon7 = 1
$mon = 7
Case $mon8 = 1
$mon = 8
Case $mon9 = 1
$mon = 9
Case $mon10 = 1
$mon = 10
Case $mon11 = 1
$mon = 11
Case $mon12 = 1
$mon = 12
EndSelect
$year = GUICtrlRead($Input_7) ;Eingegebenes Jahr(JJJJ)
$Schalt = 0
If _DateIsLeapYear($year) Then ;Überprüfung Schaltjahr
$Schalt = 1
GUICtrlSetData($L_Schaltjahr, "Schaltjahr")
EndIf
If $mon = 2 And $D > 28 Then ;Überprüfung/Korrektur Februardatum
If $Schalt = 0 Then
$D = 28
GUICtrlSetState($R28, $gui_checked)
Else
$D = 29
GUICtrlSetState($R29, $gui_checked)
EndIf
GUICtrlSetData($L_MsgTag, "'Tag' für Berechnung auf " & $D & " korrigiert!")
EndIf
If ($mon = 4 Or $mon = 6 Or $mon = 9 Or $mon = 11) And $D > 30 Then
$D = 30
GUICtrlSetData($L_MsgTag, "'Tag' für Berechnung auf " & $D & " korrigiert!")
GUICtrlSetState($R30, $gui_checked)
EndIf
$C = Int($year / 100) ;Bestimmung Jahrhundert
$J = Mod($year, 100) ;Bestimmung Jahr
If $mon < 3 Then ;Jan und Feb gehören zum Vorjahr(hundert)
If $J = 0 Then
$J = 99
$C = $C - 1
Else
$J = $J - 1
EndIf
EndIf
Select
Case $mon > 2 ;Altrömische Zeitrechnung beginnt im März
$M = $mon - 2
Case Else
$M = $mon + 10
EndSelect
$W = Mod((_Floor (2.6 * $M - 0.2) + $D + $J+ (_Floor ($J / 4)) + (_Floor ($C / 4)) - 2 * $C), 7)
; Ist das Ergebnis negativ , so addiert man 7 hinzu, so dass eine positive Zahl entsteht.
; Diese Zahl entspricht dann dem Wochentag.
If $W < 0 Then
$W = $W + 7
EndIf
If $year > 1582 And $year < 8202 Then
Select
Case $W = 0
GUICtrlSetData($Label_10, "Sonntag")
Case $W = 1
GUICtrlSetData($Label_10, "Montag")
Case $W = 2
GUICtrlSetData($Label_10, "Dienstag")
Case $W = 3
GUICtrlSetData($Label_10, "Mittwoch")
Case $W = 4
GUICtrlSetData($Label_10, "Donnerstag")
Case $W = 5
GUICtrlSetData($Label_10, "Freitag")
Case $W = 6
GUICtrlSetData($Label_10, "Sonnabend")
EndSelect
EndIf
GUICtrlSetData($WD_N, _WeekDay(1, 1, $year))
GUICtrlSetData($WD_3K, _WeekDay(6, 1, $year))
GUICtrlSetData($WD_Val, _WeekDay(14, 2, $year))
GUICtrlSetData($WD_Mai, _WeekDay(1, 5, $year))
GUICtrlSetData($WD_Einheit, _WeekDay(3, 10, $year))
GUICtrlSetData($WD_Ref, _WeekDay(31, 10, $year))
GUICtrlSetData($WD_Aller, _WeekDay(1, 11, $year))
GUICtrlSetData($WD_Heil, _WeekDay(24, 12, $year))
GUICtrlSetData($WD_1W, _WeekDay(25, 12, $year))
GUICtrlSetData($WD_2W, _WeekDay(26, 12, $year))
GUICtrlSetData($WD_Sil, _WeekDay(31, 12, $year))
GUICtrlSetColor($WD_N, 0x0000ff)
GUICtrlSetColor($WD_3K, 0x0000ff)
GUICtrlSetColor($WD_Val, 0x0000ff)
GUICtrlSetColor($WD_Mai, 0x0000ff)
GUICtrlSetColor($WD_Einheit, 0x0000ff)
GUICtrlSetColor($WD_Ref, 0x0000ff)
GUICtrlSetColor($WD_Aller, 0x0000ff)
GUICtrlSetColor($WD_Heil, 0x0000ff)
GUICtrlSetColor($WD_1W, 0x0000ff)
GUICtrlSetColor($WD_2W, 0x0000ff)
GUICtrlSetColor($WD_Sil, 0x0000ff)
;Ermittlung Ostern und abhängige Feiertage (Osterformel Gauss)
If $year > 1582 And $year < 3000 Then
$aa = Mod($year, 19)
$bb = Mod($year, 4)
$cc = Mod($year, 7)
$H1 = _Div($year, 100)
$H2 = _Div($year, 400)
$N = 4 + $H1 - $H2
$MM = 15 + $H1 - $H2 - _Floor (_Div((8 * $H1 + 13), 25))
$dd = Mod((19 * $aa + $MM), 30)
$ee = Mod((2 * $bb + 4 * $cc + 6 * $dd + $N), 7)
If $dd + $ee = 35 Then
$Easter = 50
Else
If $dd = 28 And $ee = 6 And $aa > 10 Then
$Easter = 49
Else
$Easter = 22 + $dd + $ee
EndIf
EndIf
If $Easter < 32 Then
$EasterDay = $Easter
$EasterMonth = "03"
Else
$EasterDay = $Easter - 31
$EasterMonth = "04"
EndIf
If $EasterDay < 10 Then
$EasterDay = "0" & $EasterDay
EndIf
If $year < 1900 Then ;Datumsoperationen nur mgl. wenn > 1900 , Jahr wird konvertiert
$RestJahr = Mod($year, 100)
If $Schalt = 1 Then
If $RestJahr < 10 Then
$RestJahr = "0" & $RestJahr
EndIf
$Tempyear = 20 & $RestJahr
Else
If $RestJahr < 10 Then
$RestJahr = "0" & $RestJahr
EndIf
$Tempyear = 19 & $RestJahr
EndIf
$EasterDate = $Tempyear & "/" & $EasterMonth & "/" & $EasterDay
Else
$EasterDate = $year & "/" & $EasterMonth & "/" & $EasterDay
EndIf
$WFastDate = _DateAdd( 'd', -52, $EasterDate)
$RosDat = _DateAdd( 'd', -48, $EasterDate)
$FastDat = _DateAdd( 'd', -47, $EasterDate)
$AschDat = _DateAdd( 'd', -46, $EasterDate)
$GrDoDat = _DateAdd( 'd', -3, $EasterDate)
$KarDat = _DateAdd( 'd', -2, $EasterDate)
$OSaDat = _DateAdd( 'd', -1, $EasterDate)
$OSoDat = $EasterDate
$OMoDat = _DateAdd( 'd', 1, $EasterDate)
$HiFaDat = _DateAdd( 'd', 39, $EasterDate)
$PfSoDat = _DateAdd( 'd', 49, $EasterDate)
$PfMoDat = _DateAdd( 'd', 50, $EasterDate)
$FroDat = _DateAdd( 'd', 60, $EasterDate)
;Umstellen auf TT.MM.JJJJ
$WFastDate = StringMid($WFastDate, 9) & "." & StringMid($WFastDate, 6, 2) & "." & $year
$RosDat = StringMid($RosDat, 9) & "." & StringMid($RosDat, 6, 2) & "." & $year
$FastDat = StringMid($FastDat, 9) & "." & StringMid($FastDat, 6, 2) & "." & $year
$AschDat = StringMid($AschDat, 9) & "." & StringMid($AschDat, 6, 2) & "." & $year
$GrDoDat = StringMid($GrDoDat, 9) & "." & StringMid($GrDoDat, 6, 2) & "." & $year
$KarDat = StringMid($KarDat, 9) & "." & StringMid($KarDat, 6, 2) & "." & $year
$OSaDat = StringMid($OSaDat, 9) & "." & StringMid($OSaDat, 6, 2) & "." & $year
$OSoDat = StringMid($OSoDat, 9) & "." & StringMid($OSoDat, 6, 2) & "." & $year
$OMoDat = StringMid($OMoDat, 9) & "." & StringMid($OMoDat, 6, 2) & "." & $year
$HiFaDat = StringMid($HiFaDat, 9) & "." & StringMid($HiFaDat, 6, 2) & "." & $year
$PfSoDat = StringMid($PfSoDat, 9) & "." & StringMid($PfSoDat, 6, 2) & "." & $year
$PfMoDat = StringMid($PfMoDat, 9) & "." & StringMid($PfMoDat, 6, 2) & "." & $year
$FroDat = StringMid($FroDat, 9) & "." & StringMid($FroDat, 6, 2) & "." & $year
;Ermitteln nicht von Ostern abhängiger, veränderlicher Feiertage
;Muttertag = 2. Sonntag im Mai ABER wenn Pfingsten = 2.Sonntag im Mai dann ist Muttertag am 1. Sonntag
;Der 2. Sonntag kann nur zw. dem 8. u. 14.5. liegen
For $maitag = 8 To 14
If _WeekDay($maitag, 5, $year) = "Sonntag" Then
If $maitag < 10 Then
$maitag = "0" & $maitag
EndIf
$MutterDat = $maitag & "." & "05." & $year
If $MutterDat = $PfSoDat Then
$MutterDat = _DateAdd( 'd', -7, $year & "/05/" & $maitag)
$MutterDat = _DateToNorm($MutterDat)
EndIf
ExitLoop
EndIf
Next
;Erntedankfest 1. Sonntag im Oktober (zw. 1. u. 7.10.)
For $oktobertag = 1 To 7
If _WeekDay($oktobertag, 10, $year) = "Sonntag" Then
$oktobertag = "0" & $oktobertag
$ErnteDat = $oktobertag & "." & "10." & $year
ExitLoop
EndIf
Next
;4.Advent = Sonntag vor 25.12. (zw. 18. u. 24.12.)
For $deztag = 18 To 24
If _WeekDay($deztag, 12, $year) = "Sonntag" Then
$4AdvDat = $year & "/12/" & $deztag
$3AdvDat = _DateAdd( 'd', -7, $4AdvDat)
$2AdvDat = _DateAdd( 'd', -14, $4AdvDat)
$1AdvDat = _DateAdd( 'd', -21, $4AdvDat)
$TotSoDat = _DateAdd( 'd', -28, $4AdvDat)
$BuBDat = _DateAdd( 'd', -32, $4AdvDat)
ExitLoop
EndIf
Next
$4AdvDat = StringMid(_DateToNorm($4AdvDat), 1, 6)
$3AdvDat = StringMid(_DateToNorm($3AdvDat), 1, 6)
$2AdvDat = StringMid(_DateToNorm($2AdvDat), 1, 6)
$1AdvDat = StringMid(_DateToNorm($1AdvDat), 1, 6)
$TotSoDat = _DateToNorm($TotSoDat)
$BuBDat = _DateToNorm($BuBDat)
GUICtrlSetData($L_WFastDate, $WFastDate)
GUICtrlSetData($L_RosDat, $RosDat)
GUICtrlSetData($L_FastDat, $FastDat)
GUICtrlSetData($L_AschDat, $AschDat)
GUICtrlSetData($L_GrDoDat, $GrDoDat)
GUICtrlSetData($L_KarDat, $KarDat)
GUICtrlSetData($L_OSaDat, $OSaDat)
GUICtrlSetData($L_OSoDat, $OSoDat)
GUICtrlSetData($L_OMoDat, $OMoDat)
GUICtrlSetData($L_HiFaDat, $HiFaDat)
GUICtrlSetData($L_MutterDat, $MutterDat)
GUICtrlSetData($L_PfSoDat, $PfSoDat)
GUICtrlSetData($L_PfMoDat, $PfMoDat)
GUICtrlSetData($L_FroDat, $FroDat)
GUICtrlSetData($L_ErnteDat, $ErnteDat)
GUICtrlSetData($L_TotSoDat, $TotSoDat)
GUICtrlSetData($L_BuBDat, $BuBDat)
GUICtrlSetData($L_1AdvDat, $1AdvDat)
GUICtrlSetData($L_2AdvDat, $2AdvDat)
GUICtrlSetData($L_3AdvDat, $3AdvDat)
GUICtrlSetData($L_4AdvDat, $4AdvDat)
EndIf
EndIf
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Ende
ExitLoop
EndSelect
WEnd
Exit
;===============================================================================
;
; Function Name: _Div()
;
; Description: Ermittelt den ganzzahligen Anteil einer Division.
;
; Syntax: _Div( $Div, $Dis )
;
; Parameter(s): $Div = Divident
; $Dis = Divisor
;
;===============================================================================
Func _Div($Div, $Dis)
Return Int($Div / $Dis)
EndFunc ;==>_Div
;===============================================================================
;
; Description: Datum ( YYYY/MM/TT ) umstellen auf ==> ( TT.MM.JJJJ )
;
; Parameter: $Datum(YYYY/MM/TT)
;
; Return Value: (TT.MM.JJJJ)
;
;===============================================================================
Func _DateToNorm($Datum)
Return StringMid($Datum, 9) & "." & StringMid($Datum, 6, 2) & "." & StringMid($Datum, 1, 4)
EndFunc ;==>_DateToNorm
;===============================================================================
;
; Description: Ausgabe aktuelles Datum als ( TT.MM.JJJJ )
;
; Parameter: keine
;
; Return Value: (TT.MM.JJJJ)
;
;===============================================================================
Func _NowNormDate()
Return (@MDAY & "." & @MON & "." & @YEAR)
EndFunc ;==>_NowNormDate
;===============================================================================
;
; Description: Ermittlung Wochentag aus Datum
;
; Parameter: $D, $mon, $year
;
; Return Value Wochentag
;
;===============================================================================
Func _WeekDay($D, $mon, $year)
$Schalt = 0
If _DateIsLeapYear($year) Then ;Überprüfung Schaltjahr
$Schalt = 1
EndIf
If $mon = 2 And $D > 28 Then ;Überprüfung/Korrektur Februardatum
If $Schalt = 0 Then
$D = 28
Else
$D = 29
EndIf
EndIf
If ($mon = 4 Or $mon = 6 Or $mon = 9 Or $mon = 11) And $D > 30 Then
$D = 30
EndIf
$C = Int($year / 100) ;Bestimmung Jahrhundert
$J = Mod($year, 100) ;Bestimmung Jahr
If $mon < 3 Then ;Jan und Feb gehören zum Vorjahr(hundert)
If $J = 0 Then
$J = 99
$C = $C - 1
Else
$J = $J - 1
EndIf
EndIf
Select
Case $mon > 2 ;Altrömische Zeitrechnung beginnt im März
$M = $mon - 2
Case Else
$M = $mon + 10
EndSelect
$W = Mod((_Floor (2.6 * $M - 0.2) + $D + $J+ (_Floor ($J / 4)) + (_Floor ($C / 4)) - 2 * $C), 7)
; Ist das Ergebnis negativ , so addiert man 7 hinzu, so dass eine positive Zahl entsteht.
; Diese Zahl entspricht dann dem Wochentag.
If $W < 0 Then
$W = $W + 7
EndIf
Select
Case $W = 0
$WeekDay = "Sonntag"
Case $W = 1
$WeekDay = "Montag"
Case $W = 2
$WeekDay = "Dienstag"
Case $W = 3
$WeekDay = "Mittwoch"
Case $W = 4
$WeekDay = "Donnerstag"
Case $W = 5
$WeekDay = "Freitag"
Case $W = 6
$WeekDay = "Sonnabend"
EndSelect
Return $WeekDay
EndFunc ;==>_WeekDay
Alles anzeigen
Einiges würde ich heute wahrscheinlich anders angehen. Aber es funktioniert prima. Vielleicht ist es euch ja auch von Nutzen.
Heureka, ich habs!
Ein wirklich blöder Fehler. Statt den Reg-typ aus StringSplit[2] zu entnehmen, war die [0] eingetragen. Na gut - jetzt klappt es.
Func _RestoreKeyFromBackupINI()
$INISection = IniReadSection(@ScriptDir & "\outlk_key.ini", $EntryRestore)
If UBound($INISection,0) <> 2 Then
MsgBox(4096, "Achtung!", "Sicherung <" & $EntryRestore & "> existiert nicht!.")
Else
For $i = 1 To $INISection[0][0]
$StrSplit = StringSplit($INISection[$i][1],";")
RegWrite($RegKey&$EntryRestore, $INISection[$i][0], $StrSplit[2], $StrSplit[1])
Sleep(50)
Next
EndIf
EndFunc
Alles anzeigen
Danke Bernd,
das war nicht die alleinige Ursache. Manchmal wurde die INI-Datei erstellt und manchmal nicht. Ursache soweit ich bis jetzt weiß
: Das Script läuft schneller als der Plattenzugriff.
Ich hab jetzt hinter dem Schreibbefehl eine Pause von 50 ms und bisher konnte ich den Fehler nicht wieder reproduzieren.
Func _GetKeyToBackupINI()
Dim $RegTypes[8]
$RegTypes[1] = "REG_SZ"
$RegTypes[2] = "REG_EXPAND_SZ"
$RegTypes[3] = "REG_BINARY"
$RegTypes[4] = "REG_DWORD"
$RegTypes[5] = ""
$RegTypes[6] = ""
$RegTypes[7] = "REG_MULTI_SZ"
Dim $i = 0
Dim $Wert, $val, $Fehler = 0
Do
$i+=1
$Wert = RegEnumVal($RegKey&$EntryDel, $i)
$Fehler = @Error
If $Fehler = 0 Then
$val = RegRead($RegKey&$EntryDel, $Wert)
IniWrite ( @ScriptDir & "\outlk_key.ini", $EntryDel, $Wert, $val & ";" & $RegTypes[@extended] )
Sleep(50)
EndIf
Until $Fehler <> 0
EndFunc
Alles anzeigen
Ich werde jetzt noch ein bischen an der Optik feilen und das fertige Produkt dann noch mal bei den Sripts einstellen.
Edit:
Da hab ich mich wohl zu früh gefreut. In der Kombination "Wiederherstellen" und gleich wieder "Löschen" wird kein INI-Eintrag geschrieben.
Jetzt werd ich erst mal hundert Haltepunkte setzen und Variable für Variable checken.
Ja, danke Bernd. Das wars, was ich suchte.
Hab in diesem Zusammenhang ein anderes Problem. (Subscript used with non-Array variable)
Vielleicht hast du ja dort den entscheidenden Durchblick.
Das ist die Fehlermeldung, die ich manchmal (nicht immer bekomme).
Hier das Script:
#include <GUIConstants.au3>
#include <GuiList.au3>
#NoTrayIcon
Const $RegKey="HKEY_CURRENT_USER\Software\Microsoft\Shared Tools\Outlook\Journaling\"
$Form1 = GUICreate("Outlook Journal-Eintragstyp", 552, 304, -1, -1)
$Group1 = GUICtrlCreateGroup("Vorhandene Journaltypen", 20, 15, 341, 266)
$List1 = GUICtrlCreateList("", 35, 35, 311, 227, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button_restore = GUICtrlCreateButton("Wiederherstellen", 390, 65, 136, 36)
$Button_add = GUICtrlCreateButton("Eintrag hinzufügen", 390, 125, 136, 36)
$Button_del = GUICtrlCreateButton("Markierten Eintrag löschen", 390, 185, 136, 36)
$Button_end = GUICtrlCreateButton("Ende", 390, 245, 136, 36)
GUISetState(@SW_SHOW)
$Form2 = GUICreate("Neuen Eintragstyp hinzufügen", 377, 151, -1, -1)
$Group2 = GUICtrlCreateGroup("Eintragstyp", 30, 15, 311, 66)
$Input1 = GUICtrlCreateInput("", 40, 40, 291, 26, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button_cancel2 = GUICtrlCreateButton("Abbrechen", 30, 95, 121, 26)
$Button_add_back = GUICtrlCreateButton("Hinzufügen", 220, 95, 121, 26)
$Form3 = GUICreate("ACHTUNG!", 531, 96, -1, -1)
GUICtrlCreateLabel("Achtung! Der Registry-Schlüssel wird gelöscht! Ein Backup wird erstellt.", 20, 15, 492, 30, BitOR($SS_CENTER,$SS_CENTERIMAGE,$SS_SUNKEN))
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xff0000)
GUICtrlSetState(-1, $GUI_DISABLE)
$Button_deltrue = GUICtrlCreateButton("Löschen", 20, 55, 85, 25)
$Button_delfalse = GUICtrlCreateButton("Nicht Löschen", 430, 55, 85, 25)
GUICtrlSetState(-1, $GUI_FOCUS)
$Form4 = GUICreate("Gelöschte Einträge wiederherstellen", 552, 304, -1, -1)
$Group4 = GUICtrlCreateGroup("Vorhandene Backups", 20, 15, 341, 266)
$List4 = GUICtrlCreateList("", 35, 35, 311, 227, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button_cancel4 = GUICtrlCreateButton("Abbrechen", 390, 185, 136, 36)
$Button_restore_back = GUICtrlCreateButton("Eintrag wiederherstellen", 390, 245, 136, 36)
If FileExists(@ScriptDir & "\outlk_key.ini") Then
GUICtrlSetState($Button_restore, $GUI_SHOW)
Else
GUICtrlSetState($Button_restore, $GUI_HIDE)
EndIf
_ReadSubKeyRefreshList()
While 1
$msg = GuiGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE Or $msg = $Button_end
ExitLoop
Case $msg = $Button_add
GUISetState(@SW_HIDE, $Form1)
GUISetState(@SW_SHOW, $Form2)
Case $msg = $Button_del
GUISetState(@SW_HIDE, $Form1)
GUISetState(@SW_SHOW, $Form3)
Case $msg = $Button_deltrue
$EntryDel = GUICtrlRead($List1)
If $EntryDel <> "" Then
_GetKeyToBackupINI()
RegDelete($RegKey&$EntryDel)
GUICtrlSetState($Button_restore, $GUI_SHOW)
Else
MsgBox(4096, "Achtung!", "Es wurde kein Eintrag ausgewählt.")
EndIf
GUISetState(@SW_HIDE, $Form3)
GUISetState(@SW_SHOW, $Form1)
_ReadSubKeyRefreshList()
Case $msg = $Button_delfalse
GUISetState(@SW_HIDE, $Form3)
GUISetState(@SW_SHOW, $Form1)
Case $msg = $Button_add_back
$NewEntry = GUICtrlRead($Input1)
If _GUICtrlListSelectString($List1, $NewEntry, -1) = $LB_ERR Then
If $NewEntry <> "" Then
_AddKeys4NewEntry($NewEntry)
GUISetState(@SW_SHOW, $Form1)
GUISetState(@SW_HIDE, $Form2)
_ReadSubKeyRefreshList()
Else
MsgBox(4096, "Achtung!", "Kein neuer Eintrag erstellt!")
EndIf
Else
MsgBox(4096, "Achtung!", "Eintrag existiert bereits!")
EndIf
Case $msg = $Button_cancel2
GUISetState(@SW_HIDE, $Form2)
GUISetState(@SW_SHOW, $Form1)
Case $msg = $Button_restore
GUISetState(@SW_HIDE, $Form1)
GUISetState(@SW_SHOW, $Form4)
_BackupList()
Case $msg = $Button_cancel4
GUISetState(@SW_HIDE, $Form4)
GUISetState(@SW_SHOW, $Form1)
Case $msg = $Button_restore_back
$EntryRestore = GUICtrlRead($List4)
If $EntryRestore <> "" Then
_RestoreKeyFromBackupINI()
IniDelete(@ScriptDir & "\outlk_key.ini", $EntryRestore)
If FileGetSize(@ScriptDir & "\outlk_key.ini") = 0 Then
FileDelete(@ScriptDir & "\outlk_key.ini")
GUICtrlSetState($Button_restore, $GUI_HIDE)
EndIf
$EntryRestore = ""
GUISetState(@SW_HIDE, $Form4)
GUISetState(@SW_SHOW, $Form1)
_ReadSubKeyRefreshList()
Else
MsgBox(4096, "Achtung!", "Kein Eintrag zur Wiederherstellung ausgewählt.")
EndIf
EndSelect
WEnd
Exit
Func _ReadSubKeyRefreshList()
Dim $i=0
Dim $Wert, $Fehler=0
GUICtrlSetData($List1,"")
Do
$i+=1
$Wert=RegEnumKey($RegKey, $i)
$Fehler=@Error
If $Fehler=0 Then
GUICtrlSetData($List1, $Wert)
EndIf
Until $Fehler<>0
EndFunc
Func _AddKeys4NewEntry($NewEntry)
RegWrite($RegKey&$NewEntry, "AutoJournaled", "REG_DWORD" , 00000000)
RegWrite($RegKey&$NewEntry, "JournalByContact", "REG_DWORD" , 00000000)
RegWrite($RegKey&$NewEntry, "Large Icon", "REG_SZ" , "[8]")
RegWrite($RegKey&$NewEntry, "Small Icon", "REG_SZ" , "[8]")
RegWrite($RegKey&$NewEntry, "Description", "REG_SZ" , $NewEntry)
EndFunc
Func _GetKeyToBackupINI()
Dim $RegTypes[8]
$RegTypes[1] = "REG_SZ"
$RegTypes[2] = "REG_EXPAND_SZ"
$RegTypes[3] = "REG_BINARY"
$RegTypes[4] = "REG_DWORD"
$RegTypes[5] = ""
$RegTypes[6] = ""
$RegTypes[7] = "REG_MULTI_SZ"
Dim $i = 0
Dim $Wert, $val, $Fehler = 0
Do
$i+=1
$Wert = RegEnumVal($RegKey&$EntryDel, $i)
$Fehler = @Error
If $Fehler = 0 Then
$val = RegRead($RegKey&$EntryDel, $Wert)
IniWrite ( @ScriptDir & "\outlk_key.ini", $EntryDel, $Wert, $val & ";" & $RegTypes[@extended] )
EndIf
Until $Fehler <> 0
EndFunc
Func _RestoreKeyFromBackupINI()
$INISection = IniReadSection(@ScriptDir & "\outlk_key.ini", $EntryRestore)
For $i = 1 To $INISection[0][0]
$StrSplit = StringSplit($INISection[$i][1],";")
RegWrite($RegKey&$EntryRestore, $INISection[$i][0], $StrSplit[1], $StrSplit[0])
Next
EndFunc
Func _BackupList()
$var = IniReadSectionNames(@ScriptDir & "\outlk_key.ini")
If @error Then
MsgBox(4096, "Achtung!", "Keine gesicherten Einträge vorhanden.")
Else
For $i = 1 To $var[0]
GUICtrlSetData($List4, $var[$i])
Next
EndIf
EndFunc
Alles anzeigen
In Zeile 165 tritt der Fehler auf
For $i = 1 To $INISection[0][0]
For $i = 1 To $INISection^ ERROR
Der fehler ist sicher berechtigt
Ursache ist eine zu diesem Zeitpunkt gelöschte INI-Datei.
Allerdings werden mir die Einträge aus der INI noch zur Auswahl (Wiederherstellung) angeboten.
Ich hab es mehrfach probiert:
1. neuen Eintrag (Schlüssel) angelegt
2. diesen Eintrag gelöscht (Sicherung wird in INI erstellt)
3. gelöschten Eintrag wiederhergestellt (Eintrag wird aus INI entfernt und wenn diese dann leer, wird INI gelöscht
Manchmal gehts, manchmal nicht.
Wahrscheinlich ein Aufruf am falschen Ort zur falschen Zeit.
Naja, falls jemand den Fehler erspäht - ich bin dankbar für jeden Hinweis.
Also meine Tochter (10) rennt bloß noch mit Brasilien-Klamotten durch die Gegend.
Meine Emotionen hierzu sind geringfügig mehr als die eines Eiswürfels. ![]()
Hi,
um mein Programm (Outlook Journaleintragstyp benutzerdefiniert) noch etwas komfortabler zu gestalten wollte ich automatisch vor dem Löschen eines Registryeintrages den Schlüssel mit allen Werten in einer INI-Datei sichern. Das klappt auch gut und sieht dann so aus:
Hier die Funktion:
Func _GetKeyToBackupINI()
Dim $i = 0
Dim $Wert, $val, $Fehler = 0
Do
$i+ = 1
$Wert = RegEnumVal($RegKey&$EntryDel, $i)
$Fehler = @Error
If $Fehler = 0 Then
$val = RegRead($RegKey&$EntryDel, $Wert)
IniWrite ( @ScriptDir & "\outlk_key.ini", $EntryDel, $Wert, $val )
EndIf
Until $Fehler <> 0
EndFunc
Alles anzeigen
Aber leider wird hierbei die Information über den Registry Eintragstyp nicht mit übernommen. Die ersten beiden Einträge sind REG_DWORD der Rest REG_SZ.
Wenn ich den Schlüssel wiederherstellen möchte brauche ich aber den Typ. Bin völlig konsterniert.
Edit:
Mir ist grad aufgefallen, dass die INI-Datei leider doch nicht so geeignet ist. Denn wenn ich diese auslesen will, müßte ich ja wissen wie die INI-keys (=REG-Werte) heißen.
Vielleicht hat jemand eine brauchbare Idee?
:help: