#include <GUIConstantsEx.au3>
#include <DateTimeConstants.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
Global $aDate[4] = ['01', '01', '2010']
$hGUI = GUICreate('Test', 200, 200, -1, -1)
$nDate = GUICtrlCreateDate(StringFormat('%04d/%02d/%02d', $aDate[2], $aDate[1], $aDate[0]), 10, 10, 180, 20, $DTS_SHORTDATEFORMAT)
$nLabel = GUICtrlCreateLabel('', 0, 0, 0, 0)
GUICtrlSetState(-1, $GUI_FOCUS)
$nDummy = GUICtrlCreateDummy()
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $nDummy
Send('{RIGHT}')
Switch GUICtrlRead($nDummy)
Case 2, 3
GUICtrlSetState($nLabel, $GUI_FOCUS)
EndSwitch
EndSwitch
WEnd
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $iIDFrom, $iCode, $tNMHDR, $tInfo, $a_Date[3][2] = [['Day'],['Month'],['Year']]
Switch $hWnd
Case $hGUI
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$iIDFrom = DllStructGetData($tNMHDR, 'IDFrom')
$iCode = DllStructGetData($tNMHDR, 'Code')
Switch $iIDFrom
Case $nDate
Switch $iCode
Case $DTN_DROPDOWN
$aDate[3] = 1
Case $DTN_CLOSEUP
$aDate[3] = 0
GUICtrlSendToDummy($nDummy, 3)
Case $DTN_DATETIMECHANGE
If $aDate[3] Then Return 0
$tInfo = DllStructCreate($tagNMDATETIMECHANGE, $ilParam)
For $i = 0 To 2
$a_Date[$i][1] = DllStructGetData($tInfo, $a_Date[$i][0])
If $aDate[$i] <> $a_Date[$i][1] Then
$aDate[$i] = $a_Date[$i][1]
GUICtrlSendToDummy($nDummy, $i)
ExitLoop
EndIf
Next
Return 0
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY