Example #1
0
//================================================================================================
//-----------------------------------------------------+++--> T-Clock Menu Command Message Handler:
LRESULT OnTClockCommand(HWND hwnd, WPARAM wParam)   //----------------------------------+++-->
{
	WORD wID = LOWORD(wParam);
	switch(wID) {
	case IDM_REFRESHTCLOCK:
		RefreshUs();
		break;
		
	case IDM_SHOWPROP:
		MyPropertySheet(-1);
		break;
	case IDM_PROP_ALARM:
		MyPropertySheet(1);
		break;
		
	case IDM_EXIT:
		SendMessage(hwnd,WM_CLOSE,0,0);
		break;
		
	case IDM_SHOWCALENDER:
		ToggleCalendar(1); // 1=own calendar
		break;
		
	case IDM_DISPLAYPROP:
		if(api.OS >= TOS_VISTA)
			api.Exec(L"::{26EE0668-A00A-44D7-9371-BEB064C98683}\\1\\::{C555438B-3C23-4769-A71F-B6D3D9B6053A}", NULL, NULL);
		else
			api.Exec(L"control", L"desk.cpl, display,1", NULL);
		break;
	case IDM_VOLUMECONTROL: //-------------------------------+++--> Volume Controls
		#ifndef _WIN64
		#	define OPEN_VOLUME L"SndVol32"
		#else
		#	define OPEN_VOLUME L"SndVol"
		#endif // _WIN64
		api.Exec(OPEN_VOLUME, NULL, NULL);
		break;
		
	case IDM_AUDIOPROP: //----------------------------------+++--> Audio settings / devices
		api.Exec(L"control", L"mmsys.cpl", NULL);
		break;
		
	case IDM_RECYCLEBIN:
		api.Exec(L"::{645FF040-5081-101B-9F08-00AA002F954E}", NULL, NULL);
		break;
		
	case IDM_RECYCLEBIN_PURGE:{
		SHQUERYRBINFO info = {sizeof(info)}; // Windows seriously asks :
		SHQueryRecycleBin(NULL, &info); // "are you sure to delete all items"
		if(info.i64NumItems > 0 || api.OS == TOS_2000) // when the recycle bin is actually empty...
			SHEmptyRecycleBin(g_hwndTClockMain, NULL, 0);
		break;}
		
	case IDM_MAPDRIVE: //----------------------------------+++--> Map Network Drive
		WNetConnectionDialog(hwnd, RESOURCETYPE_DISK);
		break;
		
	case IDM_DISCONNECT: //-------------------------+++--> Disconnect Network Drive
		WNetDisconnectDialog(hwnd, RESOURCETYPE_DISK);
		break;
		
	case IDM_TOGGLE_DT: //---------------------------+++--> Show / Hide the Desktop
		ToggleDesk();
		break;
		
	case IDM_QUICKY_WINEXP: { //-----------------//--+++--> Windows Explorer Opened
		api.Exec(L"Explorer", L"/e, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", hwnd);
		break;}
		
	case IDM_QUICKY_DOS: { // Command Prompt
		api.Exec(L"cmd", L"/f:on /t:0a", hwnd);
		break;}
		
	case IDM_QUICKY_EMPTYRB:
		SHEmptyRecycleBin(0, NULL, SHERB_NOCONFIRMATION);
		break;
		
	case IDM_SHUTDOWN:
		if(!ShutDown())
			MessageBox(0, L"Shutdown Request Failed!", L"ERROR", MB_OK|MB_ICONERROR|MB_SETFOREGROUND);
		break;
		
	case IDM_REBOOT:
		if(!ReBoot())
			MessageBox(0, L"Reboot Request Failed!", L"ERROR", MB_OK|MB_ICONERROR|MB_SETFOREGROUND);
		break;
		
	case IDM_LOGOFF:
		if(!LogOff())
			MessageBox(0, L"Logoff Request Failed!", L"ERROR", MB_OK|MB_ICONERROR|MB_SETFOREGROUND);
		break;
		
	case IDM_FWD_CASCADE: case IDM_FWD_SIDEBYSIDE: case IDM_FWD_STACKED: case IDM_FWD_SHOWDESKTOP: case IDM_FWD_MINALL: case IDM_FWD_UNDO:
		g_undo=(wID!=IDM_FWD_UNDO);
		/* fall through */
	case IDM_FWD_DATETIME: case IDM_FWD_CUSTOMNOTIFYICONS:
	case IDM_FWD_TASKMAN:
	case IDM_FWD_LOCKTASKBAR: case IDM_FWD_LOCKALLTASKBAR:
	case IDM_FWD_TASKBARPROP: case IDM_FWD_RUNAPP: case IDM_FWD_EXITEXPLORER:{
		HWND hwndTray = FindWindowA("Shell_TrayWnd", NULL);
		if(hwndTray) PostMessage(hwndTray, WM_COMMAND, wID, 0);
		break;}
	case IDM_DATETIME_EX:{
		HWND hwnd1, hwnd2;
		int wait = 40;
		api.Exec(L"timedate.cpl", L"", 0);
		while((hwnd2=FindWindowA((char*)(uintptr_t)32770,"Date and Time"))==0 && wait--) Sleep(50);
		if(hwnd2){
			SetActiveWindow(hwnd2);
			wait = 10;
			while((hwnd1=FindWindowExA(hwnd2,NULL,(char*)(uintptr_t)32770,"Date and Time"))==0 && wait--) Sleep(50);
			if(hwnd1){
				hwnd2 = GetDlgItem(hwnd1,116);
				if(hwnd2) PostMessage(hwnd2,BM_CLICK,0,0);
			}
		}
		break;}
		
	case IDM_CHIME: /// Alarms
		AlarmChimeEnable(-1);
		break;
		
	case IDM_STOPWATCH: /// Timers
		DialogStopWatch();
		break;
	case IDM_STOPWATCH_START:
	case IDM_STOPWATCH_RESUME:
		if(!IsWindow(g_hDlgStopWatch))
			DialogStopWatch();
		StopWatch_Resume(g_hDlgStopWatch);
		break;
	case IDM_STOPWATCH_STOP:
	case IDM_STOPWATCH_PAUSE:
		if(IsWindow(g_hDlgStopWatch))
			StopWatch_Pause(g_hDlgStopWatch);
		break;
	case IDM_STOPWATCH_RESET:
		if(IsWindow(g_hDlgStopWatch))
			StopWatch_Reset(g_hDlgStopWatch);
		break;
	case IDM_STOPWATCH_LAP:
		if(IsWindow(g_hDlgStopWatch))
			StopWatch_Lap(g_hDlgStopWatch,0);
		break;
	case IDM_TIMER:
		DialogTimer(0);
		break;
	case IDM_TIMEWATCH:
		WatchTimer(0); // Shelter All the Homeless Timers.
		break;
	case IDM_TIMEWATCHRESET:
		WatchTimer(1); // Shelter All the Homeless Timers.
		break;
	case IDM_SNTP:{
		short just_elevated = HIWORD(wParam);
		if(!just_elevated || HaveSetTimePermissions()) {
			ReplyMessage(1);
			NetTimeConfigDialog(0);
			return 1; // handled
		} else {
			if(IsWindow(g_hDlgSNTP))
				SendMessage(g_hDlgSNTP, WM_CLOSE, 1, 0); // close window but safe changes
		}
		return 0;}
	case IDM_SYNCTIME:
	case IDM_SNTP_SYNC:{
		short just_elevated = HIWORD(wParam);
		int can_sync = HaveSetTimePermissions();
		if(!just_elevated || can_sync) {
			ReplyMessage(1);
			if(can_sync) {
				SyncTimeNow();
			} else {
				if(api.ExecElevated(GetClockExe(),L"/UAC /Sync",NULL) != 0) {
					MessageBox(0, L"T-Clock must be elevated to set your system time,\nbut elevation was canceled", L"Time Sync Failed", MB_OK|MB_ICONERROR|MB_SETFOREGROUND);
				}
			}
			return 1; // handled
		}
		return 0;}
	default:
		#ifdef _DEBUG
		DBGOUT("%s: unknown ID: %.5i(0x%.4x) (hwnd:%p)", __FUNCTION__, wID, wID, hwnd);
		#endif // _DEBUG
		break;
	}
	return 0;
}
Example #2
0
//================================================================================================
// --------------------------------------------------+++--> Message Processor for Stopwatch Dialog:
static INT_PTR CALLBACK Window_Stopwatch(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)   //------+++-->
{
	switch(msg) {
	case WM_INITDIALOG:
		OnInit(hwnd);
		api.PositionWindow(hwnd,21);
		return TRUE;
	case WM_DESTROY:{
		// save pos & size
		RECT rc; GetWindowRect(hwnd,&rc);
		rc.bottom = rc.bottom-rc.top;
		if(rc.bottom != m_rezCY){
			api.SetInt(L"Timers", L"SwSize", rc.bottom);
		}else{
			api.DelValue(L"Timers", L"SwSize");
		}
		// cleaup elapsed font
		{HFONT hfont = (HFONT)SendDlgItemMessage(hwnd, IDC_SW_ELAPSED, WM_GETFONT, 0, 0);
		SendDlgItemMessage(hwnd, IDC_SW_ELAPSED, WM_SETFONT, 0, 0);
		DeleteObject(hfont);
		// cleanup button font
		hfont = (HFONT)SendDlgItemMessage(hwnd, IDC_SW_START, WM_GETFONT, 0, 0);
		SendDlgItemMessage(hwnd, IDC_SW_START, WM_SETFONT,0,0);
		SendDlgItemMessage(hwnd, IDC_SW_RESET, WM_SETFONT,0,0);
		DeleteObject(hfont);}
		break;}
	/// handling
	case WM_ACTIVATE:
		if(LOWORD(wParam)==WA_ACTIVE || LOWORD(wParam)==WA_CLICKACTIVE){
			SetWindowPos(hwnd,HWND_TOPMOST_nowarn,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
		}else{
			SetWindowPos(hwnd,HWND_NOTOPMOST_nowarn,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
			// actually it should be lParam, but that's "always" NULL for other process' windows
			SetWindowPos(GetForegroundWindow(),HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
		}
		break;
	case WM_CTLCOLORSTATIC:
		if((HWND)lParam!=GetDlgItem(hwnd,IDC_SW_ELAPSED))
			break;
		SetTextColor((HDC)wParam,0x00000000);
		SetBkColor((HDC)wParam,0x00FFFFFF);
		SetBkMode((HDC)wParam, TRANSPARENT);
		return (INT_PTR)GetStockObject(WHITE_BRUSH);
	/// resizing
	case WM_WINDOWPOSCHANGING:{
		WINDOWPOS* info=(WINDOWPOS*)lParam;
		if(!(info->flags&SWP_NOSIZE)){
			if(info->cx!=m_rezCX || info->cy<m_rezCY){
				RECT rc; GetWindowRect(hwnd,&rc);
				if(info->cx!=m_rezCX){
					info->cx=m_rezCX;
					info->x=rc.left;
				}
				if(info->cy<m_rezCY){
					info->cy=m_rezCY;
					info->y=rc.top;
				}
			}
		}
		return TRUE;}
	case WM_WINDOWPOSCHANGED:{
		WINDOWPOS* info=(WINDOWPOS*)lParam;
		if(!(info->flags&SWP_NOSIZE)){
			int diff=info->cy-m_rezCY;
			int idx;
			for(idx=IDC_SW_START; idx<=IDC_SW_EXPORT; ++idx){
				HWND control = GetDlgItem(hwnd, idx);
				RECT rc; GetWindowRect(control, &rc);
				ScreenToClient(hwnd, (POINT*)&rc);
				SetWindowPos(control, HWND_TOP, rc.left, m_rezYcontrols+diff, 0, 0, (SWP_NOSIZE|SWP_NOACTIVATE|SWP_NOZORDER));
			}
			SetWindowPos(GetDlgItem(hwnd,IDC_SW_LAPS), HWND_TOP, 0, 0, m_rezCXlist, m_rezCYlist+diff, (SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER));
		}
		return TRUE;}
	/// user interaction
	case WM_TIMER:
		if(!m_paused)
			OnTimer(hwnd);
		return TRUE;
	case WM_COMMAND: {
			WORD id = LOWORD(wParam);
			switch(id) {
			case IDC_SW_START: // Start/Stop
				StopWatch_TogglePause(hwnd);
				break;
			case IDC_SW_RESET:
				StopWatch_Reset(hwnd);
				break;
			case IDC_SW_EXPORT:
				DialogBox(0, MAKEINTRESOURCE(IDD_STOPWATCH_EXPORT), hwnd, Window_StopwatchExportDlg);
				break;
			case IDC_SW_LAP:
				StopWatch_Lap(hwnd,0);
				break;
			case IDCANCEL:
				KillTimer(hwnd, 1);
				g_hDlgStopWatch = NULL;
				DestroyWindow(hwnd);
			}
			return TRUE;
		}
	}
	return FALSE;
}