超级博客 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);}

效果

image

二.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);}

效果

image

二.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函数…

0 0