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