Beispiel #1
0
//================================================================================================
//-------------------------//-----------------------------+++--> 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);
	}
}
Beispiel #2
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
	}
}