//================================================================================================ //-------------------------//-----------------------------+++--> Save Current Settings to Registry: void OnApply(HWND hDlg) //----------------------------------------------------------------+++--> { wchar_t str[2]; char bRefresh = ((unsigned)api.GetInt(L"Desktop",L"Multimon",1) != IsDlgButtonChecked(hDlg,IDCB_MULTIMON)); api.SetInt(L"Calendar", L"bCustom", IsDlgButtonChecked(hDlg,IDCB_USECALENDAR)); api.SetInt(L"Calendar", L"CloseCalendar", IsDlgButtonChecked(hDlg,IDCB_CLOSECAL)); api.SetInt(L"Calendar", L"ShowWeekNums", IsDlgButtonChecked(hDlg,IDCB_SHOWWEEKNUMS)); api.SetInt(L"Calendar", L"ShowDayOfYear", IsDlgButtonChecked(hDlg,IDCB_SHOW_DOY)); api.SetInt(L"Calendar", L"CalendarTopMost", IsDlgButtonChecked(hDlg,IDCB_CALTOPMOST)); api.SetInt(L"Calendar", L"ViewMonths", (int)SendDlgItemMessage(hDlg,IDC_CALMONTHSPIN,UDM_GETPOS32,0,0)); api.SetInt(L"Calendar", L"ViewMonthsPast", (int)SendDlgItemMessage(hDlg,IDC_CALMONTHPASTSPIN,UDM_GETPOS32,0,0)); # ifdef WIN2K_COMPAT if(api.OS == TOS_2000) { int value = IsDlgButtonChecked(hDlg,IDCB_TRANS2KICONS); SetDesktopIconTextBk(value); api.SetInt(L"Desktop", L"Transparent2kIconText", value); if(value) TimetableAdd(SCHEDID_WIN2K, 30, 30); else TimetableRemove(SCHEDID_WIN2K); } # endif // WIN2K_COMPAT api.SetInt(L"Desktop", L"MonOffOnLock", IsDlgButtonChecked(hDlg, IDCB_MONOFF_ONLOCK)); api.SetInt(L"Desktop", L"Multimon", IsDlgButtonChecked(hDlg,IDCB_MULTIMON)); str[1] = '\0'; str[0] = '0' + (char)ComboBox_GetCurSel(GetDlgItem(hDlg,IDC_FIRSTWEEK)); SetInternational(L"iFirstWeekOfYear", str); str[0] = '0' + (char)ComboBox_GetCurSel(GetDlgItem(hDlg,IDC_FIRSTDAY)); SetInternational(L"iFirstDayOfWeek", str); if(api.OS >= TOS_XP) { // This feature requires XP+ BOOL enabled=IsDlgButtonChecked(hDlg, IDCB_MONOFF_ONLOCK); if(enabled){ RegisterSession(g_hwndTClockMain); } else { UnregisterSession(g_hwndTClockMain); } } if(api.OS >= TOS_WIN10){ int old_calendar = api.GetSystemInt(HKEY_LOCAL_MACHINE, kSectionImmersiveShell, kKeyWin32Tray, 0); if((int)IsDlgButtonChecked(hDlg, IDC_OLDCALENDAR) != old_calendar){ wchar_t param[5] = L"/Wc0"; wchar_t exe[MAX_PATH]; if(!old_calendar) param[3] = '1'; if(api.ExecElevated(GetClockExe(exe), param, NULL) == 1) CheckDlgButton(hDlg, IDC_OLDCALENDAR, old_calendar); } } if(bRefresh){ SendMessage(g_hwndClock,CLOCKM_REFRESHCLOCK,0,0); } }
//============================================== This Code Assumes... =========================== //-----------------------------------------+++--> 12pm = Noon <--> However (See Below for Details): void OnTimerAlarm(HWND hwnd, time_t time) // 12am = Midnight --------------------------+++--> { union { struct { char fname[MAX_PATH]; int repeat; SYSTEMTIME st; } s; dlgmsg_t msg; } u; #define fname_u1 u.s.fname #define repeat_u1 u.s.repeat #define st_u1 u.s.st #define msg_u2 u.msg Schedule* schedule = timetable_begin_; if(!schedule) return; if(time >= schedule->time) { for(; schedule && time >= schedule->time; schedule=timetable_begin_) { TimetableQueue(schedule, 0); if(schedule->id & SCHEDID_START_FLAG_) { switch(schedule->id) { case SCHEDID_CHIME: if(schedule->data & ALRM_BLINK) PostMessage(g_hwndClock, CLOCKM_BLINK, TRUE, 0); api.GetStr("", "JihouFile", fname_u1, sizeof(fname_u1), ""); if(fname_u1[0]) { if(schedule->data & ALRM_CHIMEHR) { // chime hour GetLocalTime(&st_u1); // faster than localtime(&time) repeat_u1 = st_u1.wHour; if(repeat_u1 == 0) repeat_u1 = 12; else if(repeat_u1 > 12) repeat_u1 -= 12; --repeat_u1; } else { repeat_u1 = 0; } PlayFile(hwnd, fname_u1, repeat_u1); } schedule->time += 3600; break; case SCHEDID_UPDATE: if(!api.GetInt(NULL, UPDATE_RELEASE, 1)) { schedule->time = 0; break; } schedule->time += 86400; schedule->time -= schedule->data; schedule->data = 0; if(time > schedule->time) schedule->time = time + 86400; api.SetInt64(NULL, UPDATE_TIMESTAMP, schedule->time); api.ShellExecute(NULL, "misc\\Options", "-unotify", NULL, SW_HIDE); break; # ifdef WIN2K_COMPAT case SCHEDID_WIN2K: SetDesktopIconTextBk(1); schedule->time += schedule->data; break; # endif // WIN2K_COMPAT default: schedule->time = 0; } } else { ltoa(schedule->id+1, (g_alarmkey+ALARMKEY_OFFSET), 10); if(schedule->data & ALRM_BLINK) PostMessage(g_hwndClock,CLOCKM_BLINK,FALSE,0); if(schedule->data & ALRM_DIALOG) { // From BounceWindow.c AlarmGetMSG(&msg_u2); ReleaseTheHound(hwnd, msg_u2.name, msg_u2.message, msg_u2.settings); } api.GetStr(g_alarmkey, "File", fname_u1, sizeof(fname_u1), ""); if(fname_u1[0]) { if(schedule->data & ALRM_REPEAT) { repeat_u1 = api.GetInt(g_alarmkey, "Times", 1) - 1; if(repeat_u1 < 0) repeat_u1 = -1; }else if(schedule->data & ALRM_CHIMEHR) { // chime hour GetLocalTime(&st_u1); // faster than localtime(&time) repeat_u1 = st_u1.wHour; if(repeat_u1 == 0) repeat_u1 = 12; else if(repeat_u1 > 12) repeat_u1 -= 12; --repeat_u1; }else repeat_u1 = 0; PlayFile(hwnd, fname_u1, repeat_u1); } if(schedule->data & ALRM_ONESHOT) { api.SetInt(g_alarmkey, "Alarm", 0); schedule->time = 0; } else { schedule->time = AlarmNextTimestamp(); } } if(!schedule->time) { free(schedule); } else { TimetableQueue(schedule, 1); } } #ifndef _DEBUG if(IsPlaying()) { EmptyWorkingSet(GetCurrentProcess()); } #endif } }