1. 程式人生 > >Win32 系統部分函式

Win32 系統部分函式

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

六.開啟我的電腦和我的文件

也是用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 系統部分函式

一.GetSystemMetrics 返回與windows環境有關的資訊  void CDemoDlg::OnTest() { CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST); pListBox

作業系統檔案系統C語言實現的部分函式(一)

void startsys() { int i; FILE *fp; char str[9]; myvhard = (unsigned char *)malloc(SIZE*sizeof(char)); /*申請 1M空間*/ if((fp=fopen("myfsy

去除系統部分屬性觸摸是出現的色值

AR name 去掉 透明 light phone 邊框 only -m .ios系統中元素被觸摸時產生的半透明灰色遮罩怎麽去掉 a,button,input,textarea{-webkit-tap-highlight-color: rgba(0,0,0,0;)} 部分a

微模塊數據中心智能監控系統部分

相關信息 根據 傳感器 產品 遠程 組成 蓄電池 電機 情況 概述:  智能監控系統具有集中管理功能,同時支持對監控系統的遠程管理與維護,遠程操作界面與本地操作界面保持一致。  監控系統主要針對微模塊數據中心基礎設施層各組成系統,如配電、制冷、安防及環境等系統,系統內各組成

MATLAB實現系統傳遞函式模型的建立與轉換

理論: 1、在線性系統理論中,常用的描述系統的數學模型為傳遞函式, 其形式有: (1)有理多項式分式表示式 (2)零極點增益表示式 這些模型之間都有著內在的聯絡,可以相互進行轉換。   2、不同形式之間模型轉換的函式包括: (1)tf2zp:多項式傳遞

postgresql 部分函式整理

1.extract     select extract(hour from '2016-05-06 23:00:01'::timestamp); --返回23 返回指定部分的值。

Linux核心編譯以及新增系統呼叫函式

實驗內容 (作者:Baron_w,禁止轉載) ⚫ 編譯 Linux 核心 ⚫ Linux 啟動過程 ⚫ Linux 系統呼叫實現分析 ⚫ 增加一個系統呼叫** 相關知識 dmesg 的用法 ⚫ 列出載入到核心中的所有驅動 我們可以使用如‘more’。 ‘tail’ ,

行星工單系統部分實現(1)-流程控制

1.工單系統的表格頁 工單系統是一種網路軟體系統,根據不同組織,部門和外部客戶的需求,來由針對的管理,維護和追蹤一系列的問題和請求。大多用於記錄、處理、跟蹤一項工作的完成情況。 為使客服同學有序、協同處理客戶問題,客服技術團隊打造了多渠道整合的,可靈活配置的,便於流轉的行星工單系統。 由於工單系統從屬後臺

Mysql 系統資訊函式

系統資訊函式 系統資訊函式用來查詢MySQL資料庫的系統資訊。例如,查詢資料庫的版本,查詢資料庫的當前使用者等。 獲取MySQL版本號、連線數、資料庫名的函式 VERSION()函式返回資料庫的版本號; CONNECTION_ID()函式返回伺服器的連線數,也就是到現在為止MySQL服

Nodejs學習——模組系統函式

  建立模組        例項 var say = require('./test2'); say.nodejs();         

各資料庫系統獨有函式

前邊我們講解了一些常用的函式,這些函式不是在各個主流資料庫系統中有著相同的名稱和用法,就是在各個主流資料庫系統中有等價的實現,這些函式可以基本滿足我們大部分需求。不過在各個主流資料庫系統還提供了一些自身獨有的函式,這些函式在其他的資料庫系統中一般都沒有等價的實現,使用這些函式以後會給系統的跨資料庫移植帶來一定

linux系統部分指令(都是經過驗證通過的)

1.永久關閉開啟防火牆:service iptables stop     service iptables start 2.ping其他機器:ping + ip地址 3.檢視linux系統位數:getconf  LONG_BIT 4.大

c語言動態分配記憶體及記憶體分配部分函式

#include<stdio.h> /** 在C中動態分配記憶體的基本步驟有: 1,用malloc類的函式分配記憶體; 2,用這些記憶體支援應用程式 3,用free函式釋放記憶體 二、動態記憶體分配函式     malloc :從堆上分配記憶體 &nbs

二叉樹的鏈式儲存及其部分函式實現

題意 實現二叉樹的鏈式儲存和部分的函式 思路 這是一個鏈式儲存實現的二叉樹。首先 是構造了一個名為 node 的 二叉樹資料結構內有(1)char 變數,(2)兩個指向其本身的結構體指標變數 lch,rch.然後 用typedef分別給 node結構體起了一個Bn的別名和給 node*

學生管理系統v2(函式封裝)

之前的非函式版本 列印學生列表程式碼重複,如果要修改需要處處修改。while if 巢狀,程式碼越來越長,不容易維護。所以我們封裝成。函式封裝將大問題分解成小問題,結構更清晰。 student_list = ['小王', '小紅', '小李'] def show_students(

linux高階程式設計常用的系統呼叫函式整理

這一個月來,因為電腦原因,沒有過多的進行Android方面的開發,而是選擇了學習Linux/Unix高階程式設計方面的知識,目前到了總結階段。現貼出學習過程中遇到的基本系統呼叫函式,方便以後查詢和回憶,接下來也將更新自己的學習總結和理解。 動態載入共享庫函式 需要的新增的標頭檔案

golang strings包部分函式使用

import ( "fmt" "strings" ) func main() { //檢查字串傳是否包含指定字元,返回true或者false fmt.Println(strings.Contains("hello go", "hello")) //組合切片成一個字串 fmt.Printl

golang strconv包部分函式使用

import ( "fmt" "strconv" ) func main() { //append追加 slice := make([]byte, 0, 1024) slice = strconv.AppendBool(slice, true) slice = strconv.Append

大資料linux系統部分命令解析(2)0912

1.檢視ip ifconfig 解釋: ifconfig 常用命令關閉網絡卡,檢視ip。請看幫助! NAME ifconfig - configure a network interface SYNOPSIS ifconf

source insight 新增系統函式原始碼(包含原始碼下載下載地址)

1、在BASE專案下新增Project->Open Project ,開啟Base專案2、開啟PreferencesProject->Preferences,選擇Symbol Lookups選項卡3、開啟Import Symbols for All