超级博客 Win32 系统部分函数
来源:互联网 发布:淘宝网系统 编辑:程序博客网 时间:2024/04/26 01:46
点击打开链接
一.GetSystemMetrics
返回与windows环境有关的信息
void CDemoDlg::OnTest() { CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST); pListBox->ResetContent(); int nWidth = 0; int nHeight = 0; CString strText = _T(""); //屏幕大小 strText.Format(_T("屏幕大小: %d × %d"), GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); pListBox->AddString(strText); //全屏窗口客户区大小 strText.Format(_T("全屏窗口客户区大小: %d × %d"), GetSystemMetrics(SM_CXFULLSCREEN), GetSystemMetrics(SM_CYFULLSCREEN)); pListBox->AddString(strText); //最大化窗口大小 strText.Format(_T("最大化窗口大小: %d × %d"), GetSystemMetrics(SM_CXMAXIMIZED), GetSystemMetrics(SM_CYMAXIMIZED)); pListBox->AddString(strText); //最小化窗口大小 strText.Format(_T("最小化窗口大小: %d × %d"), GetSystemMetrics(SM_CXMINIMIZED), GetSystemMetrics(SM_CYMINIMIZED)); pListBox->AddString(strText); //窗口边界大小 strText.Format(_T("窗口边界大小: %d × %d"), GetSystemMetrics(SM_CXBORDER), GetSystemMetrics(SM_CYBORDER)); pListBox->AddString(strText); //固定框架厚度 strText.Format(_T("固定框架厚度: %d × %d"), GetSystemMetrics(SM_CXFIXEDFRAME), GetSystemMetrics(SM_CYFIXEDFRAME)); pListBox->AddString(strText); //可变框架厚度 strText.Format(_T("可变框架厚度: %d × %d"), GetSystemMetrics(SM_CXSIZEFRAME), GetSystemMetrics(SM_CYSIZEFRAME)); pListBox->AddString(strText); //水平滚动条箭头大小 strText.Format(_T("水平滚动条箭头大小: %d × %d"), GetSystemMetrics(SM_CXHSCROLL), GetSystemMetrics(SM_CYHSCROLL)); pListBox->AddString(strText); //垂直滚动条箭头大小 strText.Format(_T("垂直滚动条箭头大小: %d × %d"), GetSystemMetrics(SM_CXVSCROLL), GetSystemMetrics(SM_CYVSCROLL)); pListBox->AddString(strText); //标题栏高度 strText.Format(_T("标题栏高度: %d"), GetSystemMetrics(SM_CYCAPTION)); pListBox->AddString(strText); //标题栏按钮大小 strText.Format(_T("标题栏按钮大小: %d × %d"), GetSystemMetrics(SM_CXSIZE), GetSystemMetrics(SM_CYSIZE)); pListBox->AddString(strText); //菜单栏高度 strText.Format(_T("菜单栏高度: %d"), GetSystemMetrics(SM_CYMENU)); pListBox->AddString(strText); //光标大小 strText.Format(_T("")); strText.Format(_T("光标大小: %d × %d"), GetSystemMetrics(SM_CXCURSOR), GetSystemMetrics(SM_CYCURSOR)); pListBox->AddString(strText); //图标大小 strText.Format(_T("")); strText.Format(_T("默认图标大小: %d × %d"), GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON)); pListBox->AddString(strText);}
效果
二.GetSysColor
//获得显示元素的颜色COLORREF crColor = ::GetSysColor(COLOR_3DFACE);
三.SystemParametersInfo
获取(GET)和设置(SET)数量众多的windows系统参数.
应用1:屏幕保护程序
如下GET取参数,SET设置参数
void CDemoDlg::OnTest() { BOOL bActive = FALSE; //判断屏幕保护程序是否启用 SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, &bActive, 0); if (bActive) { //禁用屏幕保护程序 if (SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE, NULL, 0)) { SetDlgItemText(IDC_TEST, _T("启用屏幕保护程序")); AfxMessageBox(_T("禁用屏幕保护程序成功。")); } else { AfxMessageBox(_T("禁用屏幕保护程序失败。")); } } else { //启用屏幕保护程序 if (SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, NULL, 0)) { SetDlgItemText(IDC_TEST, _T("禁用屏幕保护程序")); AfxMessageBox(_T("启用屏幕保护程序成功。")); } else { AfxMessageBox(_T("启用屏幕保护程序失败。")); } }}
应用2:设置桌面壁纸
//获得文件路径CString strPathName = dlg.GetPathName();//设置桌面墙纸if (SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*)(LPCTSTR)strPathName, SPIF_UPDATEINIFILE)){ AfxMessageBox(_T("设置桌面墙纸成功。"));}else{ AfxMessageBox(_T("设置桌面墙纸失败。"));}
四.执行屏幕保护程序
发送内置的SC_SCREENSAVE命令
void CDemoDlg::OnTest() { Sleep(1000); //执行屏幕保护程序 ::SendMessage(m_hWnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0);}
五.执行外部程序
有三种方法
void CDemoDlg::OnTest1() { //运行计算器应用程序 WinExec(_T("calc.exe"), SW_SHOW);}void CDemoDlg::OnTest2() { //运行计算器应用程序 ShellExecute(m_hWnd, _T("open"), _T("calc.exe"), _T(""), _T(""), SW_SHOW); }void CDemoDlg::OnTest3() { STARTUPINFO StartupInfo; PROCESS_INFORMATION ProcessInformation; ZeroMemory(&StartupInfo, sizeof(StartupInfo)); StartupInfo.cb = sizeof(StartupInfo); //运行计算器应用程序 ::CreateProcess(NULL, _T("calc.exe"), NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &StartupInfo, &ProcessInformation);}
参考:http://hi.baidu.com/%BF%AA%D0%C4de%B9%FB%D7%D3/blog/item/e343b710735a2dcaa6ef3f05.html
六.打开我的电脑和我的文档
也是用ShellExecute方法
void CDemoDlg::OnTest1() { //打开我的电脑 ShellExecute(NULL, NULL, "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", NULL, NULL, SW_SHOWNORMAL);}void CDemoDlg::OnTest2() { //打开我的文档 ShellExecute(NULL, NULL, "::{450D8FBA-AD25-11D0-98A8-0800361B1103}", NULL, NULL, SW_SHOWNORMAL);}
七.让应用程序只有一个实例
利用互斥体
//创建互斥量m_hMutex = ::CreateMutex(NULL, FALSE, _T("DemoApp"));//判断互斥量是否存在if (GetLastError() == ERROR_ALREADY_EXISTS) { AfxMessageBox("应用程序已经运行。"); return FALSE; }else{ AfxMessageBox("应用程序第一次运行。");}
八.把应用程序调至前台
即把程序调到桌面的最前面
//创建互斥量m_hMutex = ::CreateMutex(NULL, FALSE, _T("DemoApp"));//判断互斥量是否存在if (GetLastError() == ERROR_ALREADY_EXISTS) { //获得桌面窗口 CWnd* pDesktopWnd = CWnd::GetDesktopWindow(); //获得第一个子窗口 CWnd* pWnd = pDesktopWnd->GetWindow(GW_CHILD); while (pWnd != NULL) { //获得窗口标志 if (::GetProp(pWnd->m_hWnd, m_pszExeName)) { //激活窗口 pWnd->SetForegroundWindow(); pWnd->SetDlgItemText(IDC_TEXT, _T("应用程序已经运行。")); return FALSE; } // 继续寻找下一个窗口 pWnd = pWnd->GetWindow(GW_HWNDNEXT); } return FALSE; }
九.注销,关闭,重启操作系统
利用ExitWindowsEx函数和不同参数
//注销系统ExitWindowsEx(EWX_LOGOFF, 0);//关闭系统ExitWindowsEx(EWX_SHUTDOWN, 0);//重启系统ExitWindowsEx(EWX_REBOOT, 0);
十.获得系统时间和当前时间
两个方法GetSystemTime和GetCurrentTime
void CDemoDlg::OnTest() { SYSTEMTIME systime; //获得系统时间 ::GetSystemTime(&systime); CString strText = _T(""); strText.Format(_T("%d-%d-%d\n%d:%d:%d"), systime.wYear, systime.wMonth, systime.wDay, systime.wHour, systime.wMinute, systime.wSecond); AfxMessageBox(strText);}
void CDemoDlg::OnTest() { CTime time; //获得当前时间 time = CTime::GetCurrentTime(); CString strText = _T(""); strText.Format(_T("%d-%d-%d\n%d:%d:%d"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond()); AfxMessageBox(strText);}
十一.使用定时器
即KillTimer和SetTimer再加一个回调函数
void CDemoDlg::OnTest1() { m_nTime = 0; UpdateData(FALSE); //取消定时器 KillTimer(1); //设置定时器 SetTimer(1, 1000, NULL);}void CDemoDlg::OnTest2() { //取消定时器 KillTimer(1); }void CDemoDlg::OnTimer(UINT nIDEvent) { if (nIDEvent == 1) { m_nTime++; UpdateData(FALSE); } CDialog::OnTimer(nIDEvent);}
十二.获取计算机运行时间
GetTickCount会精准计算当前计算机从开机一直运行的时间,如下计算间隔
void CDemoDlg::OnTest() { //开始时间 DWORD dwStart = GetTickCount(); for (int i = 0; i < 10000; i++) { for (int j = 0; j < 10000; j++) { } } //结束时间 DWORD dwStop = GetTickCount(); //时间间隔 DWORD dwElapse = dwStop - dwStart; CString strText = _T(""); strText.Format(_T("时间间隔:%d毫秒"), dwElapse); AfxMessageBox(strText);}
十二.获取计算机名和用户名
即GetUserName和GetComputerName函数…
一.GetSystemMetrics
返回与windows环境有关的信息
void CDemoDlg::OnTest() { CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST); pListBox->ResetContent(); int nWidth = 0; int nHeight = 0; CString strText = _T(""); //屏幕大小 strText.Format(_T("屏幕大小: %d × %d"), GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); pListBox->AddString(strText); //全屏窗口客户区大小 strText.Format(_T("全屏窗口客户区大小: %d × %d"), GetSystemMetrics(SM_CXFULLSCREEN), GetSystemMetrics(SM_CYFULLSCREEN)); pListBox->AddString(strText); //最大化窗口大小 strText.Format(_T("最大化窗口大小: %d × %d"), GetSystemMetrics(SM_CXMAXIMIZED), GetSystemMetrics(SM_CYMAXIMIZED)); pListBox->AddString(strText); //最小化窗口大小 strText.Format(_T("最小化窗口大小: %d × %d"), GetSystemMetrics(SM_CXMINIMIZED), GetSystemMetrics(SM_CYMINIMIZED)); pListBox->AddString(strText); //窗口边界大小 strText.Format(_T("窗口边界大小: %d × %d"), GetSystemMetrics(SM_CXBORDER), GetSystemMetrics(SM_CYBORDER)); pListBox->AddString(strText); //固定框架厚度 strText.Format(_T("固定框架厚度: %d × %d"), GetSystemMetrics(SM_CXFIXEDFRAME), GetSystemMetrics(SM_CYFIXEDFRAME)); pListBox->AddString(strText); //可变框架厚度 strText.Format(_T("可变框架厚度: %d × %d"), GetSystemMetrics(SM_CXSIZEFRAME), GetSystemMetrics(SM_CYSIZEFRAME)); pListBox->AddString(strText); //水平滚动条箭头大小 strText.Format(_T("水平滚动条箭头大小: %d × %d"), GetSystemMetrics(SM_CXHSCROLL), GetSystemMetrics(SM_CYHSCROLL)); pListBox->AddString(strText); //垂直滚动条箭头大小 strText.Format(_T("垂直滚动条箭头大小: %d × %d"), GetSystemMetrics(SM_CXVSCROLL), GetSystemMetrics(SM_CYVSCROLL)); pListBox->AddString(strText); //标题栏高度 strText.Format(_T("标题栏高度: %d"), GetSystemMetrics(SM_CYCAPTION)); pListBox->AddString(strText); //标题栏按钮大小 strText.Format(_T("标题栏按钮大小: %d × %d"), GetSystemMetrics(SM_CXSIZE), GetSystemMetrics(SM_CYSIZE)); pListBox->AddString(strText); //菜单栏高度 strText.Format(_T("菜单栏高度: %d"), GetSystemMetrics(SM_CYMENU)); pListBox->AddString(strText); //光标大小 strText.Format(_T("")); strText.Format(_T("光标大小: %d × %d"), GetSystemMetrics(SM_CXCURSOR), GetSystemMetrics(SM_CYCURSOR)); pListBox->AddString(strText); //图标大小 strText.Format(_T("")); strText.Format(_T("默认图标大小: %d × %d"), GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON)); pListBox->AddString(strText);}
效果
二.GetSysColor
//获得显示元素的颜色COLORREF crColor = ::GetSysColor(COLOR_3DFACE);
三.SystemParametersInfo
获取(GET)和设置(SET)数量众多的windows系统参数.
应用1:屏幕保护程序
如下GET取参数,SET设置参数
void CDemoDlg::OnTest() { BOOL bActive = FALSE; //判断屏幕保护程序是否启用 SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, &bActive, 0); if (bActive) { //禁用屏幕保护程序 if (SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE, NULL, 0)) { SetDlgItemText(IDC_TEST, _T("启用屏幕保护程序")); AfxMessageBox(_T("禁用屏幕保护程序成功。")); } else { AfxMessageBox(_T("禁用屏幕保护程序失败。")); } } else { //启用屏幕保护程序 if (SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, NULL, 0)) { SetDlgItemText(IDC_TEST, _T("禁用屏幕保护程序")); AfxMessageBox(_T("启用屏幕保护程序成功。")); } else { AfxMessageBox(_T("启用屏幕保护程序失败。")); } }}
应用2:设置桌面壁纸
//获得文件路径CString strPathName = dlg.GetPathName();//设置桌面墙纸if (SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*)(LPCTSTR)strPathName, SPIF_UPDATEINIFILE)){ AfxMessageBox(_T("设置桌面墙纸成功。"));}else{ AfxMessageBox(_T("设置桌面墙纸失败。"));}
四.执行屏幕保护程序
发送内置的SC_SCREENSAVE命令
void CDemoDlg::OnTest() { Sleep(1000); //执行屏幕保护程序 ::SendMessage(m_hWnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0);}
五.执行外部程序
有三种方法
void CDemoDlg::OnTest1() { //运行计算器应用程序 WinExec(_T("calc.exe"), SW_SHOW);}void CDemoDlg::OnTest2() { //运行计算器应用程序 ShellExecute(m_hWnd, _T("open"), _T("calc.exe"), _T(""), _T(""), SW_SHOW); }void CDemoDlg::OnTest3() { STARTUPINFO StartupInfo; PROCESS_INFORMATION ProcessInformation; ZeroMemory(&StartupInfo, sizeof(StartupInfo)); StartupInfo.cb = sizeof(StartupInfo); //运行计算器应用程序 ::CreateProcess(NULL, _T("calc.exe"), NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &StartupInfo, &ProcessInformation);}
参考:http://hi.baidu.com/%BF%AA%D0%C4de%B9%FB%D7%D3/blog/item/e343b710735a2dcaa6ef3f05.html
六.打开我的电脑和我的文档
也是用ShellExecute方法
void CDemoDlg::OnTest1() { //打开我的电脑 ShellExecute(NULL, NULL, "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", NULL, NULL, SW_SHOWNORMAL);}void CDemoDlg::OnTest2() { //打开我的文档 ShellExecute(NULL, NULL, "::{450D8FBA-AD25-11D0-98A8-0800361B1103}", NULL, NULL, SW_SHOWNORMAL);}
七.让应用程序只有一个实例
利用互斥体
//创建互斥量m_hMutex = ::CreateMutex(NULL, FALSE, _T("DemoApp"));//判断互斥量是否存在if (GetLastError() == ERROR_ALREADY_EXISTS) { AfxMessageBox("应用程序已经运行。"); return FALSE; }else{ AfxMessageBox("应用程序第一次运行。");}
八.把应用程序调至前台
即把程序调到桌面的最前面
//创建互斥量m_hMutex = ::CreateMutex(NULL, FALSE, _T("DemoApp"));//判断互斥量是否存在if (GetLastError() == ERROR_ALREADY_EXISTS) { //获得桌面窗口 CWnd* pDesktopWnd = CWnd::GetDesktopWindow(); //获得第一个子窗口 CWnd* pWnd = pDesktopWnd->GetWindow(GW_CHILD); while (pWnd != NULL) { //获得窗口标志 if (::GetProp(pWnd->m_hWnd, m_pszExeName)) { //激活窗口 pWnd->SetForegroundWindow(); pWnd->SetDlgItemText(IDC_TEXT, _T("应用程序已经运行。")); return FALSE; } // 继续寻找下一个窗口 pWnd = pWnd->GetWindow(GW_HWNDNEXT); } return FALSE; }
九.注销,关闭,重启操作系统
利用ExitWindowsEx函数和不同参数
//注销系统ExitWindowsEx(EWX_LOGOFF, 0);//关闭系统ExitWindowsEx(EWX_SHUTDOWN, 0);//重启系统ExitWindowsEx(EWX_REBOOT, 0);
十.获得系统时间和当前时间
两个方法GetSystemTime和GetCurrentTime
void CDemoDlg::OnTest() { SYSTEMTIME systime; //获得系统时间 ::GetSystemTime(&systime); CString strText = _T(""); strText.Format(_T("%d-%d-%d\n%d:%d:%d"), systime.wYear, systime.wMonth, systime.wDay, systime.wHour, systime.wMinute, systime.wSecond); AfxMessageBox(strText);}
void CDemoDlg::OnTest() { CTime time; //获得当前时间 time = CTime::GetCurrentTime(); CString strText = _T(""); strText.Format(_T("%d-%d-%d\n%d:%d:%d"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond()); AfxMessageBox(strText);}
十一.使用定时器
即KillTimer和SetTimer再加一个回调函数
void CDemoDlg::OnTest1() { m_nTime = 0; UpdateData(FALSE); //取消定时器 KillTimer(1); //设置定时器 SetTimer(1, 1000, NULL);}void CDemoDlg::OnTest2() { //取消定时器 KillTimer(1); }void CDemoDlg::OnTimer(UINT nIDEvent) { if (nIDEvent == 1) { m_nTime++; UpdateData(FALSE); } CDialog::OnTimer(nIDEvent);}
十二.获取计算机运行时间
GetTickCount会精准计算当前计算机从开机一直运行的时间,如下计算间隔
void CDemoDlg::OnTest() { //开始时间 DWORD dwStart = GetTickCount(); for (int i = 0; i < 10000; i++) { for (int j = 0; j < 10000; j++) { } } //结束时间 DWORD dwStop = GetTickCount(); //时间间隔 DWORD dwElapse = dwStop - dwStart; CString strText = _T(""); strText.Format(_T("时间间隔:%d毫秒"), dwElapse); AfxMessageBox(strText);}
十二.获取计算机名和用户名
即GetUserName和GetComputerName函数…
- 超级博客 Win32 系统部分函数
- Win32 系统部分函数
- Win32 系统部分函数
- Win32 系统部分函数
- 超级博客 Win32 设备管理(1)
- 超级博客 Win32 设备管理(2)
- WinAPI--Win32 系统入口函数介绍
- JDE 开发-部分系统函数
- C#调用Win32 的部分API函数--User32.dll
- 超级博客 C++学习
- 利用system函数窃取linux系统超级特权
- win32学习笔记(部分)
- C#利用Win32 API函数设定系统时间
- WinAPI【Win32 系统入口函数介绍】WinMain DllMain
- c#调用win32 API函数修改系统时间
- 超级博客 www.pkibm.com
- win32 函数 VB 函数
- 超级网络营销CRM系统
- 自然语言处理工具2
- Microsoft Azure 大计算 – 宣布收购 GreenButton
- JAVA 面试题<基础>
- 模拟退火算法解决0-1背包问题的实现
- SQL Server 2012安装示例数据库
- 超级博客 Win32 系统部分函数
- C#做服务器,客户端,实现局域网通信
- poj 1321 棋盘问题
- mysql数据类型和长度
- java中实例变量、类变量以及构造方法的加载顺序
- 超级博客 Win32 设备管理(1)
- 输入四川会显示right吗?
- “黑马程序员” do-while和while-do的区别
- 超级博客 Win32 设备管理(2)