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("设置桌面背景失败"); // 输出错误信息
}