系统相关功能开发(六)-桌面相关

1.获取桌面对话框


2.获取任务栏对话框句柄

void CDesktopSampleDlg::OnButtonGetBar()	// 获取任务栏对话框句柄
{
	HWND hWinBar = ::FindWindow("Shell_TrayWnd","");	// 获取任务栏对话框
	if(hWinBar != NULL)	WriteLog("获取任务栏窗口句柄成功=0x%08X", hWinBar);	// 输出信息
	else WriteLog("获取任务栏窗口句柄失败");			// 输出错误信息
}

3.获取桌面列表视图句柄

void CDesktopSampleDlg::OnButtonGetDesklist()		// 获取桌面列表视图句柄
{
	HWND hDeskWnd = ::FindWindow("Progman",NULL);	// 获取桌面程序对象
	if(hDeskWnd == NULL)							// 如果获取失败
	{
		WriteLog("获取桌面句柄失败。");	return;		// 显示错误信息并返回		
	}	
	HWND  hSubDeskWnd=::GetDlgItem(hDeskWnd, 0L);	// 获取桌面对象中的第一个对象
	if(hSubDeskWnd == NULL)								// 如果获取失败
	{
		WriteLog("获取桌面窗体中的对象失败。");	return;	// 显示错误信息并返回
	}  
	HWND  hDeskList=::GetDlgItem(hSubDeskWnd, 1L);		// 获取桌面对象中的第一个对象的第二个对象
	if(hDeskList == NULL)								// 如果获取失败
	{	
		WriteLog("获取桌面窗体中的对象失败。");	return;	// 显示错误信息并返回
	}
	WriteLog("获取桌面列表视图句柄成功=0x%08X", hDeskList);	// 输出获取的信息
}



4.获取任务栏属性

void CDesktopSampleDlg::OnButtonGettoolbarpro()			// 获取任务栏属性
{	   
	if(FAILED(CoInitialize(NULL)))						// 初始化COM工作环境
	{
		WriteLog("初始化COM工作环境失败");	return;		// 显示错误信息并返回
	}
	IShellDispatch* pShellDispatch=NULL;				// 定义IShellDispatch接口变量
	if(SUCCEEDED(CoCreateInstance(CLSID_Shell,NULL,CLSCTX_INPROC_SERVER, IID_IDispatch,(LPVOID*)&pShellDispatch)))   
	{	// 创建IShellDispatch实例
		if(SUCCEEDED(pShellDispatch->TrayProperties())) WriteLog("显示任务栏属性窗口成功");	// 显示成功信息
		else WriteLog("显示任务栏属性窗口失败");		// 显示错误信息
	}
	else WriteLog("创建IShellDispatch接口实例失败");	// 显示错误信息
	CoUninitialize();									// 释放COM工作环境
}



5.隐藏和显示桌面图标

void CDesktopSampleDlg::OnButtonHideDesktop()			// 隐藏桌面文件
{	
	HWND hDeskWnd = ::FindWindow("Progman",NULL);		// 获取桌面文件句柄	
	if(hDeskWnd!=NULL)	::ShowWindow(hDeskWnd, SW_HIDE);// 隐藏桌面文件
}
void CDesktopSampleDlg::OnButtonShowDesktop()			// 显示桌面文件
{	
	HWND hDeskWnd = ::FindWindow("Progman",NULL);		// 获取桌面文件句柄	
	if(hDeskWnd!=NULL)	::ShowWindow(hDeskWnd, SW_SHOW);// 显示桌面
}



6.隐藏和显示Windows任务栏

void CDesktopSampleDlg::OnButtonHideBar()				// 隐藏任务栏
{
	HWND hWinBar = ::FindWindow("Shell_TrayWnd","");	// 获取任务栏句柄
	if(hWinBar!=NULL)	::ShowWindow(hWinBar, SW_HIDE);	// 隐藏任务栏
}
void CDesktopSampleDlg::OnButtonShowBar()				// 显示任务栏
{
	HWND hWinBar = ::FindWindow("Shell_TrayWnd","");	// 获取任务栏句柄	
	if(hWinBar!=NULL)	::ShowWindow(hWinBar, SW_SHOW);	// 显示任务栏
}



7.隐藏和显示“开始”按钮

void CDesktopSampleDlg::OnButtonShowStart()				// 显示开始按钮
{
    HWND hWinBar = ::FindWindow("Shell_TrayWnd","");	// 获取任务栏句柄
    if(hWinBar!=NULL)
    {
        HWND hMenu = ::FindWindowEx(hWinBar, 0, "Button", NULL);	// 获取开始按钮句柄
        if(hMenu!=NULL)	::ShowWindow(hMenu, SW_SHOW);	// 显示开始按钮
        else WriteLog("获取开始按钮对话框句柄失败");	// 输出错误信息
    }
    else WriteLog("获取Windows任务栏句柄失败");			// 输出错误信息
}
void CDesktopSampleDlg::OnButtonHideStart()				// 隐藏开始按钮
{
    HWND hWinBar = ::FindWindow("Shell_TrayWnd","");	// 获取任务栏句柄
    if(hWinBar!=NULL)
    {
        HWND hMenu = ::FindWindowEx(hWinBar, 0, "Button", NULL);	// 获取开始按钮句柄
        if(hMenu!=NULL)	::ShowWindow(hMenu, SW_HIDE);	// 隐藏开始按钮
        else WriteLog("获取开始按钮对话框句柄失败");	// 输出错误信息
    }
    else WriteLog("获取Windows任务栏句柄失败");			// 输出错误信息
}



8.隐藏和显示任务栏时钟

void CDesktopSampleDlg::OnButtonHideClock()					// 隐藏任务栏时钟
{
	HWND hWinBar = ::FindWindow("Shell_TrayWnd",NULL);		// 获取任务栏句柄
	if (hWinBar != NULL)									// 如果成功,则
	{
		HWND hNotifyWnd = ::FindWindowEx(hWinBar, 0, "TrayNotifyWnd",NULL);	// 获取通知托盘句柄
		if (hNotifyWnd != NULL)								// 如果成功,则
		{
			HWND hClockWnd = ::FindWindowEx(hNotifyWnd, 0, "TrayClockWClass", NULL);	// 获取时钟句柄
			if(hClockWnd!=NULL)	::ShowWindow(hClockWnd, SW_HIDE);	// 如果成功,则隐藏时钟
			else  WriteLog("获取时钟句柄失败");				// 显示错误信息
		}
		else WriteLog("获取通知托盘句柄失败");				// 显示错误信息
	}
	else WriteLog("获取任务栏句柄失败");					// 显示错误信息
}
void CDesktopSampleDlg::OnButtonShowClock()					// 显示任务栏时钟
{
	HWND hWinBar = ::FindWindow("Shell_TrayWnd",NULL);		// 获取任务栏句柄
	if (hWinBar != NULL)									// 如果成功,则
	{
		HWND hNotifyWnd = ::FindWindowEx(hWinBar, 0, "TrayNotifyWnd",NULL);	// 获取通知托盘句柄
		if (hNotifyWnd != NULL)								// 如果成功,则
		{
			HWND hClockWnd = ::FindWindowEx(hNotifyWnd, 0, "TrayClockWClass", NULL);	// 获取时钟句柄
			if(hClockWnd!=NULL)	::ShowWindow(hClockWnd, SW_SHOW);	// 如果成功,则显示时钟
			else  WriteLog("获取时钟句柄失败");				// 显示错误信息
		}
		else WriteLog("获取通知托盘句柄失败");				// 显示错误信息
	}
	else WriteLog("获取任务栏句柄失败");					// 显示错误信息	
}



9.判断屏幕保护程序是否在运行

void CDesktopSampleDlg::OnButtonSaverscreenRunning()	// 判断屏幕保护程序是否在运行
{
	HDESK hDesktop;										// 定义桌面句柄
    hDesktop = OpenDesktop(TEXT("screen-saver"), 0, FALSE, MAXIMUM_ALLOWED );	// 打开桌面屏保程序
    if(hDesktop == NULL)								// 如果返回的句柄无效,则
	{
		if(GetLastError() == ERROR_ACCESS_DENIED)		// 如果返回ERROR_ACCESS_DENIED错误=屏保正在运行
			WriteLog("屏保正在运行");					// 输出信息提示
		else WriteLog("没有运行屏保");					// 否则=屏保没有运行
	}
	else												// 如果返回的句柄有效=屏保正在运行
	{
		WriteLog("屏保正在运行");						// 输出信息提示
		CloseDesktop(hDesktop);							// 关闭桌面
	}
}



10.判断是否使用大字体

void CDesktopSampleDlg::OnButtonGetFont()				// 判断系统是否使用大字体
{
	HWND hWnd = ::GetDesktopWindow();					// 获取桌面句柄
	if (hWnd != NULL)									// 如果成功,则
	{
		HDC	hDC = ::GetWindowDC(hWnd);					// 获取桌面上下文
		if (hDC != NULL)								// 如果成功,则
		{
			int	iOldMode = SetMapMode(hDC, MM_TEXT);	// 设置上下文映射模式 
			TEXTMETRIC   tm;							// 定义字体结构变量
			if (GetTextMetrics(hDC,&tm))				// 获取桌面上下文字体信息
			{
				SetMapMode(hDC,iOldMode);				// 恢复桌面上下文的映射模式
				::ReleaseDC(hWnd,hDC);					// 释放上下文资源
				if (tm.tmHeight > 16)					// 使用大字体
					WriteLog("系统使用的是大字体,大小=%d", tm.tmHeight);	
				else WriteLog("系统使用的不是大字体,大小=%d", tm.tmHeight);   // 没有使用大字体
			}
			else WriteLog("获取字体信息失败");			// 输出错误信息
		}
		else WriteLog("获取桌面上下文失败");			// 输出错误信息
	}
	else WriteLog("获取桌面句柄失败");					// 输出错误信息
}



11.改变桌面背景颜色

void CDesktopSampleDlg::OnButtonSetBackgroud()			// 改变桌面背景颜色
{
	if (SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "River Sumida.jpg", 0))	// 修改桌面背景
		WriteLog("设置桌面背景成功");					// 输出提示信息
	else WriteLog("设置桌面背景失败");					// 输出错误信息
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值