首页
社区
课程
招聘
[原创]视力保护色设置小程序(附源码)
发表于: 2013-1-20 14:10 15950

[原创]视力保护色设置小程序(附源码)

2013-1-20 14:10
15950
360不是有个眼睛卫士能把窗口设置成视力保护色的功能,我感觉挺好的,另外我增加了桌面背景色设置选项,反正我们搞开发的要那么多花哨的背景干嘛,我一般都喜欢纯色背景





首先我们先定义几个辅助函数


//选择颜色控件
BOOL ChooseColorDlg(
	HWND hWnd, 
	COLORREF &rgbResult,
	COLORREF *prgbCustom
	)
{
	CHOOSECOLOR		clr = {0};

	clr.lStructSize = sizeof(CHOOSECOLOR);
	clr.hwndOwner = hWnd;
	clr.hInstance = 0;
	clr.rgbResult = rgbResult;
	clr.lpCustColors = prgbCustom;
	clr.Flags =  CC_RGBINIT | CC_ANYCOLOR | CC_FULLOPEN;
	if(!ChooseColor(&clr))
		return FALSE;
	
	rgbResult = clr.rgbResult;

	return TRUE;
}

//获取当前墙纸
BOOL GetWallPaper(
	LPWSTR lpszWallPaper, 
	LPDWORD lpdwStyle
	)
{
	HRESULT				hr;
	WALLPAPEROPT		wallPaperOpt;
	IActiveDesktop		*pActiveDesktop;
	WCHAR				szPathFile[MAX_PATH];

	hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
		IID_IActiveDesktop, (void**)&pActiveDesktop);
	if(hr != S_OK)
		return FALSE;

	if(lpdwStyle)
	{
		wallPaperOpt.dwSize = sizeof(WALLPAPEROPT);
		wallPaperOpt.dwStyle = 0;
		hr = pActiveDesktop->GetWallpaperOptions(&wallPaperOpt, 0);
		if(hr != S_OK)
		{
			pActiveDesktop->Release();
			return FALSE;
		}
		*lpdwStyle = wallPaperOpt.dwStyle;
	}
	if(lpszWallPaper)
	{
		hr = pActiveDesktop->GetWallpaper(szPathFile, MAX_PATH, AD_GETWP_LAST_APPLIED);
		if(hr != S_OK)
		{
			pActiveDesktop->Release();
			return FALSE;
		}
		lstrcpyW(lpszWallPaper, szPathFile);
	}

	pActiveDesktop->Release();
	return TRUE;
}

//设置墙纸
BOOL SetWallPaper(
	LPCWSTR lpszWallPaper, 
	LPDWORD lpdwStyle
	)
{
	HRESULT				hr;
	WALLPAPEROPT		wallPaperOpt;
	IActiveDesktop		*pActiveDesktop;

	hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
		IID_IActiveDesktop, (void**)&pActiveDesktop);
	if(hr != S_OK)
		return FALSE;

	if(lpdwStyle)
	{
		wallPaperOpt.dwSize = sizeof(WALLPAPEROPT);
		wallPaperOpt.dwStyle = *lpdwStyle;
		hr = pActiveDesktop->SetWallpaperOptions(&wallPaperOpt, 0);
		if(hr != S_OK)
		{
			pActiveDesktop->Release();
			return FALSE;
		}
	}
	if(lpszWallPaper)
	{
		pActiveDesktop->SetWallpaper(lpszWallPaper, 0);
		if(hr != S_OK)
		{
			pActiveDesktop->Release();
			return FALSE;
		}
	}
	pActiveDesktop->ApplyChanges(AD_APPLY_ALL);
		
	pActiveDesktop->Release();
	return TRUE;
}

//获取注册表值
DWORD ReadRegValue(
	HKEY hkey, LPTSTR lpSubKey, 
	LPTSTR lpValueName,
	LPBYTE lpValue, 
	DWORD &cbValue
	)
{
	HKEY		hResult;
	DWORD		dwType;

	//打开键
	if(RegOpenKeyEx(hkey, lpSubKey, 0, KEY_READ, &hResult) != ERROR_SUCCESS)
		return -1;

	//读取值
	if(RegQueryValueEx(hResult, lpValueName, 0, &dwType, lpValue, &cbValue) != ERROR_SUCCESS)
	{
		RegCloseKey(hResult);
		return -1;
	}

	//关闭键
	RegCloseKey(hResult);
	
	return dwType;
}

//设置注册值
BOOL SetRegValue(
	HKEY hkey, 
	LPTSTR lpSubKey, 
	LPTSTR lpValueName, 
	LPBYTE lpValue, 
	DWORD cbValue, 
	DWORD dwType
	)
{
	HKEY		hResult;

	//打开键
	if( RegOpenKeyEx(hkey, lpSubKey, 0, KEY_WRITE, &hResult) != ERROR_SUCCESS )
		return FALSE;

	//设置注册表值
	if( RegSetValueEx(hResult, lpValueName, 0, dwType, lpValue, cbValue) != ERROR_SUCCESS )
	{
		RegCloseKey(hResult);
		return FALSE;
	}

	//关闭键
	RegCloseKey(hResult);

	return TRUE;
}



//主控件消息处理

INT_PTR CALLBACK MainDlgProc(
	HWND hDlg,
	UINT message,
	WPARAM wParam,
	LPARAM lParam
	)
{
	switch (message)
	{
	case WM_PAINT:
		{
			HDC				hDC;
			PAINTSTRUCT		ps;

			hDC = BeginPaint(hDlg, &ps);
			EndPaint(hDlg, &ps);
		}
		break;
	case WM_INITDIALOG:
		{
			HWND			hwndFocus = (HWND) wParam;
			LPARAM			lInitParam = lParam; 

			SetFocus(GetDlgItem(hDlg, IDC_BTN_QUIT));
			SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_BTN_REFRESH, 0), 0);
		}
		break;
	case WM_COMMAND:
		{
			WORD			wNotifyCode = HIWORD(wParam);
			WORD			wID = LOWORD(wParam);
			HWND			hwndCtl = (HWND) lParam;

			switch(wID)
			{
			case IDC_BTN_REFRESH://刷新
				{
					TCHAR			szText[120];
					COLORREF		rgbColor;

					rgbColor = GetSysColor(COLOR_WINDOW);
					wsprintf(szText, _T("%d %d %d"), GetRValue(rgbColor), GetGValue(rgbColor), GetBValue(rgbColor));//0x%02X%02X%02X
					SetDlgItemText(hDlg, IDC_EDIT_COLOR, szText);

					rgbColor = GetSysColor(COLOR_BACKGROUND);
					wsprintf(szText, _T("%d %d %d"), GetRValue(rgbColor), GetGValue(rgbColor), GetBValue(rgbColor));
					SetDlgItemText(hDlg, IDC_EDIT_COLOR2, szText);
				}
				break;
			case IDC_BTN_PEAGREEN://窗口背景豆绿色
				{
					COLORREF		aRgbValues[] = {RGB(204, 232, 207)};
					INT				aElements[] = {COLOR_WINDOW};

					SetSysColors(1, aElements, aRgbValues);
					SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_BTN_REFRESH, 0), 0);
				}
				break;
			case IDC_BTN_DEFAULT://窗口背景默认色(白色)
				{
					COLORREF		aRgbValues[] = {RGB(255, 255, 255)};
					INT				aElements[] = {COLOR_WINDOW};

					SetSysColors(1, aElements, aRgbValues);
					SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_BTN_REFRESH, 0), 0);
				}
				break;
			case IDC_BTN_CUSTOM://自定义窗口背景色
				{
					COLORREF		aRgbCustom[16];
					COLORREF		aRgbValues[] = {RGB(255, 255, 255)};
					INT				aElements[] = {COLOR_WINDOW};

					if(ChooseColorDlg(hDlg, aRgbValues[0], aRgbCustom))
					{
						SetSysColors(1, aElements, aRgbValues);
						SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_BTN_REFRESH, 0), 0);
					}
				}
				break;
			case IDC_BTN_PEAGREEN2://桌面背景豆绿色
				{
					COLORREF		aRgbValues[] = {RGB(204, 232, 207)};
					INT				aElements[] = {COLOR_BACKGROUND};
					WCHAR			szWallPaper[MAX_PATH];

					GetWallPaper(szWallPaper, NULL);//取得当前壁纸
					if(lstrcmpiW(szWallPaper, L""))
					{
						SetWallPaper(L"", NULL);//取消壁纸
					}

					SetSysColors(1, aElements, aRgbValues);
					SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_BTN_REFRESH, 0), 0);
				}
				break;
			case IDC_BTN_CUSTOM2://桌面自定义背景颜色
				{
					COLORREF		aRgbCustom[16];
					COLORREF		aRgbValues[] = {RGB(153, 217, 234)};
					INT				aElements[] = {COLOR_BACKGROUND};
					WCHAR			szWallPaper[MAX_PATH];

					if(ChooseColorDlg(hDlg, aRgbValues[0], aRgbCustom))
					{
						GetWallPaper(szWallPaper, NULL);//取得当前壁纸
						if(lstrcmpiW(szWallPaper, L""))
						{
							SetWallPaper(L"", NULL);//取消壁纸
						}

						SetSysColors(1, aElements, aRgbValues);
						SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_BTN_REFRESH, 0), 0);
					}
				}
				break;
			case IDC_BTN_SAVE://由于SetSysColors设置的颜色重启后就无效了,如果你想长期有效的话需要保存到注册表里面
				{
					TCHAR			szText[120];
					TCHAR			szColor[120];
					DWORD			cbValue;

					GetDlgItemText(hDlg, IDC_EDIT_COLOR, szText, sizeof(szText) / sizeof(TCHAR));
					cbValue = sizeof(szColor) / sizeof(TCHAR);
					ReadRegValue(HKEY_CURRENT_USER, _T("Control Panel\\Colors"), _T("Window"), (LPBYTE)szColor, cbValue);
					if(lstrcmpi(szText, szColor))
					{
						cbValue = sizeof(szColor) / sizeof(TCHAR);
						SetRegValue(HKEY_CURRENT_USER, _T("Control Panel\\Colors"), _T("Window"), (LPBYTE)szText, cbValue, REG_SZ);
					}
					
					GetDlgItemText(hDlg, IDC_EDIT_COLOR2, szText, sizeof(szText) / sizeof(TCHAR));
					cbValue = sizeof(szColor) / sizeof(TCHAR);
					ReadRegValue(HKEY_CURRENT_USER, _T("Control Panel\\Colors"), _T("Background"), (LPBYTE)szColor, cbValue);
					if(lstrcmpi(szText, szColor))
					{
						cbValue = sizeof(szColor) / sizeof(TCHAR);
						SetRegValue(HKEY_CURRENT_USER, _T("Control Panel\\Colors"), _T("Background"), (LPBYTE)szText, cbValue, REG_SZ);
					}
				}
				break;
			case IDC_BTN_QUIT://退出
				{
					SendMessage(hDlg, WM_CLOSE, 0, 0);
				}
				break;
			}
		}
		break;
	case WM_CLOSE:
		{
			EndDialog(hDlg, (INT_PTR)lParam);
		}
		break;
	}

	return FALSE;
}

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 6
支持
分享
最新回复 (17)
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
Nice Pro !
2013-1-20 15:29
0
雪    币: 6695
活跃值: (1159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不错,谢谢了!
2013-1-22 15:29
0
雪    币: 93908
活跃值: (200199)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
Thanks for share.
2013-1-22 15:35
0
雪    币: 74
活跃值: (703)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢分享,mark
2013-1-22 16:51
0
雪    币: 3343
活跃值: (1243)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
不错的小工具。
2013-1-22 19:38
0
雪    币: 48
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
thank you
2013-1-22 21:11
0
雪    币: 99
活跃值: (96)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
非常感谢,有新意
2013-1-22 23:10
0
雪    币: 138
活跃值: (460)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
挺好使~  赞++
2013-1-22 23:22
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
不错,谢谢了
2013-1-23 10:27
0
雪    币: 204
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
感谢LZ的程序,我在想,这个程序是作为背景用还是屏保时用好呢?如果要保护最好不看休息一会啦,呵呵。
2013-1-23 10:51
0
雪    币: 162
活跃值: (63)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
不错的软件,实在的很
2013-1-23 18:27
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
good
分享的都是好淫
2013-1-24 16:22
0
雪    币: 1318
活跃值: (149)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
Thanks for share.
2013-1-24 21:01
0
雪    币: 205
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
mark先。
2013-1-25 08:44
0
雪    币: 123
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
谢谢分享,学习了,
2013-1-27 12:40
0
雪    币: 107
活跃值: (326)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
学习代码...哈哈...不过楼主那几个配色...早上可以不用吃饭咯..嘿嘿
2013-1-28 09:09
0
雪    币: 465
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
Thanks for share.
2013-2-3 13:42
0
游客
登录 | 注册 方可回帖
返回
//