system(系統(tǒng))函數(shù)
成都創(chuàng)新互聯(lián)從2013年開始,先為龍江等服務(wù)建站,龍江等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為龍江企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
windows操作系統(tǒng)下system () 函數(shù)詳解(主要是在C語言中的應(yīng)用)
功 能: 發(fā)出一個(gè)DOS命令
用 法: int system(char *command);
system函數(shù)已經(jīng)被收錄在標(biāo)準(zhǔn)c庫中,可以直接調(diào)用
程序例:
#include stdlib.h
#include stdio.h
int main(void)
{
printf("About to spawn and run a DOS command\n");
system("dir");
return 0;
}
又如:system("pause")可以實(shí)現(xiàn)凍結(jié)屏幕,便于觀察程序的執(zhí)行結(jié)果;system("CLS")可以實(shí)現(xiàn)清屏操作。而調(diào)用color函數(shù)可以改變控制臺的前景色和背景,具體參數(shù)在下面說明。
例如,用 system("color 0A"); 其中color后面的0是背景色代號,A是前景色代號。各顏色代碼如下:
0=黑色 1=藍(lán)色 2=綠色 3=湖藍(lán)色 4=紅色 5=紫色 6=黃色 7=白色 8=灰色 9=淡藍(lán)色 A=淡綠色 B=淡淺綠色 C=淡紅色 D=淡紫色 E=淡黃色 F=亮白色
(注意:Microsoft Visual C++6.0 支持system)
舉例
看了下面實(shí)例,相信你會對學(xué)到更多system在C程序設(shè)計(jì)中的應(yīng)用。
例一:
C語言調(diào)用DOS命令實(shí)現(xiàn)定時(shí)關(guān)機(jī):
#includestdio.h
#includestring.h
#includestdlib.h
int print()
{
printf(" ╪╪╪╪╪╪╧╧╧╧╧╧╧╧╪╪╪╪╪╪\n");
printf("╔═══╧╧C語言關(guān)機(jī)程序 ╧╧═══╗\n");
printf("║※1.實(shí)現(xiàn)10分鐘內(nèi)的定時(shí)關(guān)閉計(jì)算機(jī) ║\n");
printf("║※2.立即關(guān)閉計(jì)算機(jī) ║\n");
printf("║※3.注銷計(jì)算機(jī) ║\n");
printf("║※0.退出系統(tǒng) ║\n");
printf("╚═══════════════════╝\n");
return 0;
}
void main()
{
system("title C語言關(guān)機(jī)程序");//設(shè)置cmd窗口標(biāo)題
system("mode con cols=48 lines=25");//窗口寬度高度
system("color 0B");
system("date /T");
system("TIME /T");
char cmd[20]="shutdown -s -t ";
char t[5]="0";
print();
int c;
scanf("%d",c);
getchar();
switch(c)
{
case 1:printf("您想在多少秒后自動關(guān)閉計(jì)算機(jī)?(0~600)\n");scanf("%s",t);system(strcat(cmd,t));break;
case 2:system("shutdown -p");break;
case 3:system("shutdown -l");break;
case 0:break;
default:printf("Error!\n");
}
system("pause");
exit(0);
}
例二:
用C語言刪除文件,例如文件的位置是d:\123.txt
用system()函數(shù)執(zhí)行windows命令。
#include stdlib.h
#include stdio.h
int main(void)
{
system("del d:\\123.txt");
return 0;
}
調(diào)用window庫窗口函數(shù)即可創(chuàng)建windows窗口。
必須使用windows的編譯器,如VC,MS等等。
RegisterClassEx函數(shù):
該函數(shù)注冊在隨后調(diào)用CreateWindow函數(shù)和CreateWindowEx函數(shù)中使用的窗口類。 RegisterClass函數(shù)己經(jīng)由函數(shù)RegisterClassEx函數(shù)來代替,但是,如果不需要設(shè)置類的小目標(biāo)則仍然可以使用RegisterClass函數(shù)。
CreateWindowEx函數(shù):
該函數(shù)創(chuàng)建一個(gè)具有擴(kuò)展風(fēng)格的層疊式窗口、彈出式窗口或子窗口,其他與CreateWindow函數(shù)相同。關(guān)于創(chuàng)建窗口和其他參數(shù)的內(nèi)容,請參看CreateWindow。具體仍可見微軟的msdn。
消息處理函數(shù)WindowProc:
該函數(shù)是一個(gè)應(yīng)用程序定義的函數(shù)。它處理發(fā)送給窗口的消息。WINDPROC類型定義了一個(gè)指向該回調(diào)函數(shù)的指針。WindowProc是用于應(yīng)用程序定義函數(shù)的占位符。
函數(shù)原型:
LRESULT CALLBACK WindowProc (HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
參數(shù):
hwnd:指向窗口的句柄。
uMsg:指定消息類型。
wParam:指定其余的、消息特定的信息。該參數(shù)的內(nèi)容與UMsg參數(shù)值有關(guān)。
IParam:指定其余的、消息特定的信息。該參數(shù)的內(nèi)容與uMsg參數(shù)值有關(guān)。
返回值:返回值就是消息處理結(jié)果,它與發(fā)送的消息有關(guān)。
一個(gè)簡單的Window的代碼如下:
#include?Windows.h
#include?tchar.h
LRESULT?WINAPI?WinProc(HWND?hWnd,UINT?Msg,WPARAM?wParam,LPARAM?lParam);
int?WinMain(?
__in?HINSTANCE?hInstance,?
__in_opt?HINSTANCE?hPrevInstance,?
__in?LPSTR?lpCmdLine,?
__in?int?nShowCmd?
)
{
TCHAR?*szName?=?_T("myWindow");
WNDCLASSEX?wc?=?{0};
HWND?hWnd?????=?NULL;
MSG?Msg???????=?{0};
wc.cbClsExtra????=?0;
wc.cbWndExtra????=?0;
wc.cbSize????????=?sizeof(WNDCLASSEX);
wc.hbrBackground?=?(HBRUSH)GetStockObject(WHITE_BRUSH);//通過函數(shù)來設(shè)置一個(gè)白色的背景,這里大家設(shè)置為NULL看看,會很有趣的
wc.hCursor???????=?NULL;//不設(shè)置
wc.hIcon?????????=?NULL;//不設(shè)置
wc.hIconSm???????=?NULL;//不設(shè)置
wc.hInstance?????=?hInstance;//當(dāng)前程序的句柄,hInstance是有系統(tǒng)給傳遞的
wc.lpfnWndProc???=?WinProc;//窗口處理過程的回調(diào)函數(shù)。
wc.lpszClassName?=?szName;//窗口類的名字。
wc.lpszMenuName??=?NULL;?
wc.style?????????=?CS_HREDRAW?|?CS_VREDRAW;?
RegisterClassEx(wc);//在系統(tǒng)中注冊
hWnd?=?CreateWindowEx(WS_EX_CLIENTEDGE,szName,_T("我的窗口我喜歡"),WS_OVERLAPPEDWINDOW,
200,100,600,400,NULL,NULL,hInstance,NULL);//創(chuàng)建窗口,窗口標(biāo)題為"我的窗口我喜歡"
if(hWnd?==?NULL)
{
MessageBox(NULL,_T("There's?an?Error"),_T("Error?Title"),MB_ICONEXCLAMATION|MB_OK);
return?0;
}
ShowWindow(hWnd,nShowCmd);//顯示窗口
UpdateWindow(hWnd);
//下面是對消息的循環(huán)處理,大家先不必管這些,下節(jié)課我會細(xì)說的
while(GetMessage(Msg,NULL,0,0))
{
TranslateMessage(Msg);//翻譯消息
DispatchMessage(Msg);//分派消息
}
return?Msg.message;
}
//消息處理函數(shù)
LRESULT?WINAPI?WinProc(HWND?hWnd,UINT?Msg,WPARAM?wParam,LPARAM?lParam)
{
switch(Msg)//處理消息過程
{
case?WM_DESTROY://響應(yīng)鼠標(biāo)單擊關(guān)閉按鈕事件
PostQuitMessage(0);//退出消息隊(duì)列
return?0;//退出函數(shù)
}
return?DefWindowProc(hWnd,Msg,wParam,lParam);
}
使用Windows API:
int GetWindowText( HWND hWnd, LPTSTR lpString, int nMaxCount );
例如:窗口句柄為 hWnd;
則可以這么用:
char szTitle[100];
GetWindowText(hWnd, szTitle, 100);
這樣,szTitle中就是窗口hWnd的標(biāo)題了