Ich würde das noch etwas abwandeln, so dass man auch das Alter des Geburtstagskindes anzeigen lassen kann.
AutoIt
#include <Date.au3>
Local $aGeburtstage[2][3] = [["Andreas", "28.12.1989 10:43", False], ["Kloppstock", "31.12.1996 00:16", False]]
While Sleep(1000)
For $i = 0 To UBound($aGeburtstage) - 1
$aDate = StringSplit($aGeburtstage[$i][1], " ", 3)
$aTime = $aDate[1]
$aDate = StringSplit($aDate[0], ".", 3)
$aTime = StringSplit($aTime, ":", 3)
$iDiff = _DateDiff("n", StringFormat("%04i/%02i/%02i %02i:%02i:00", @YEAR, $aDate[1], $aDate[0], $aTime[0], $aTime[1]), _NowCalc()) ; die Differenz in Minuten berechnen (wenn Datum/Zeit noch nicht erreicht, dann ist die Differenz negativ)
If $iDiff >= 0 And Not $aGeburtstage[$i][2] Then ; wenn das Geburtsdatum/-Zeit erreicht wurde und die MsgBox noch nicht angezeigt wurde, dann...
$iCount = _DateDiff("Y", StringFormat("%04i/%02i/%02i 00:00:00", $aDate[2], $aDate[1], $aDate[0]), _NowCalc()) ; das Alter berechnen
MsgBox(48, "Alles Gute!", StringFormat("Hallo %s!\nHerzlichen Glückwunsch zum %i. Geburtstag!", $aGeburtstage[$i][0], $iCount))
$aGeburtstage[$i][2] = True ; MsgBox wurde bereits angezeigt
EndIf
$iDiff = _DateDiff("s", @YEAR & "/12/31 23:59:59", _NowCalc())
If $iDiff >= 0 Then $aGeburtstage[$i][2] = False ; Neujahr alle Geburtstage zurücksetzen
Next
WEnd
Alles anzeigen