從internet下載較大的軟件時(shí),由于目前網(wǎng)絡(luò)帶寬的原因,許多人喜歡在晚間進(jìn)行,而到深夜時(shí)就存在人需要休息的問(wèn)題。目前絕大多數(shù)下載軟件可以估算出下載所需的時(shí)間,如果到時(shí)讓計(jì)算機(jī)自動(dòng)關(guān)機(jī),就可以免受守候之苦。本文介紹筆者用c++ builder 5編寫的一個(gè)能實(shí)現(xiàn)定時(shí)自動(dòng)關(guān)機(jī)的程序。
程序功能
圖1界面上半部分用于即時(shí)顯示當(dāng)前系統(tǒng)的日期和時(shí)間信息,下半部分用于設(shè)置自動(dòng)關(guān)機(jī)的日期和時(shí)間。當(dāng)系統(tǒng)時(shí)間和設(shè)置的關(guān)機(jī)時(shí)間吻合(相等)并且“自動(dòng)關(guān)機(jī)生效”被選中時(shí),計(jì)算機(jī)將自動(dòng)關(guān)閉。其中,只有當(dāng)所設(shè)定的關(guān)機(jī)時(shí)間在有效范圍內(nèi)時(shí)(即大于系統(tǒng)時(shí)間),“自動(dòng)關(guān)機(jī)生效”才能被激活。
組件設(shè)置
向窗體上放置兩個(gè)tgroupbox組件:groupbox1和groupbox2,其caption屬性分別設(shè)置為“當(dāng)前系統(tǒng)時(shí)間”和“預(yù)設(shè)關(guān)機(jī)時(shí)間”。在這兩個(gè)組件上再放置4個(gè)tdatetimepicker組件:datetimepicker1、datetimepicker2和datetimepicker3、datetimepicker4,其中前兩個(gè)分別用于顯示當(dāng)前系統(tǒng)的日期和時(shí)間,后兩個(gè)用于設(shè)置自動(dòng)關(guān)機(jī)的日期和時(shí)間,它們的部分屬性值設(shè)置如下表所示:
在窗體上放置一個(gè)tcheckbox組件:checkbox1(其caption屬性設(shè)置為“自動(dòng)關(guān)機(jī)生效”)和一個(gè)ttimer組件:timer1(其interval屬性取缺省值1000)。
代碼編寫
在窗體的oncreate事件過(guò)程中編寫如下代碼:
void __fastcall tform1::formcreate(tobject *sender)
{
checkbox1->checked=false;
//初始設(shè)置為不可訪問(wèn)
checkbox1->enabled=false;
datetimepicker4->datetime=now();
datetimepicker3->datetime=now();
datetimepicker2->datetime=now();
//用系統(tǒng)時(shí)間初始化組件
datetimepicker1->datetime=now();
}
在組件timer1的ontimer事件過(guò)程中編寫如下代碼:
void __fastcall tform1::timer1timer(tobject *sender)
{
datetimepicker2->datetime=now();
//接收當(dāng)前日期和時(shí)間,用于即時(shí)顯示
datetimepicker1->datetime=now();
//隨時(shí)檢測(cè)設(shè)定的關(guān)機(jī)日期和時(shí)間是否有效
if(datetimepicker4->datetime < now())
{
checkbox1->checked=false;
//無(wú)效時(shí)不可訪問(wèn)
checkbox1->enabled=false;
}
else
checkbox1->enabled=true; //有效時(shí)可以訪問(wèn)
if(checkbox1->checked == true && datetimetostr(datetimepicker4->datetime) == datetimetostr(now()))
{//判斷定時(shí)關(guān)機(jī)條件是否滿足
dword tmp;
//調(diào)用win api函數(shù)關(guān)閉計(jì)算機(jī)
exitwindowsex(ewx_shutdown,tmp);
}
}
程序功能
圖1界面上半部分用于即時(shí)顯示當(dāng)前系統(tǒng)的日期和時(shí)間信息,下半部分用于設(shè)置自動(dòng)關(guān)機(jī)的日期和時(shí)間。當(dāng)系統(tǒng)時(shí)間和設(shè)置的關(guān)機(jī)時(shí)間吻合(相等)并且“自動(dòng)關(guān)機(jī)生效”被選中時(shí),計(jì)算機(jī)將自動(dòng)關(guān)閉。其中,只有當(dāng)所設(shè)定的關(guān)機(jī)時(shí)間在有效范圍內(nèi)時(shí)(即大于系統(tǒng)時(shí)間),“自動(dòng)關(guān)機(jī)生效”才能被激活。
組件設(shè)置
向窗體上放置兩個(gè)tgroupbox組件:groupbox1和groupbox2,其caption屬性分別設(shè)置為“當(dāng)前系統(tǒng)時(shí)間”和“預(yù)設(shè)關(guān)機(jī)時(shí)間”。在這兩個(gè)組件上再放置4個(gè)tdatetimepicker組件:datetimepicker1、datetimepicker2和datetimepicker3、datetimepicker4,其中前兩個(gè)分別用于顯示當(dāng)前系統(tǒng)的日期和時(shí)間,后兩個(gè)用于設(shè)置自動(dòng)關(guān)機(jī)的日期和時(shí)間,它們的部分屬性值設(shè)置如下表所示:
在窗體上放置一個(gè)tcheckbox組件:checkbox1(其caption屬性設(shè)置為“自動(dòng)關(guān)機(jī)生效”)和一個(gè)ttimer組件:timer1(其interval屬性取缺省值1000)。
代碼編寫
在窗體的oncreate事件過(guò)程中編寫如下代碼:
void __fastcall tform1::formcreate(tobject *sender)
{
checkbox1->checked=false;
//初始設(shè)置為不可訪問(wèn)
checkbox1->enabled=false;
datetimepicker4->datetime=now();
datetimepicker3->datetime=now();
datetimepicker2->datetime=now();
//用系統(tǒng)時(shí)間初始化組件
datetimepicker1->datetime=now();
}
在組件timer1的ontimer事件過(guò)程中編寫如下代碼:
void __fastcall tform1::timer1timer(tobject *sender)
{
datetimepicker2->datetime=now();
//接收當(dāng)前日期和時(shí)間,用于即時(shí)顯示
datetimepicker1->datetime=now();
//隨時(shí)檢測(cè)設(shè)定的關(guān)機(jī)日期和時(shí)間是否有效
if(datetimepicker4->datetime < now())
{
checkbox1->checked=false;
//無(wú)效時(shí)不可訪問(wèn)
checkbox1->enabled=false;
}
else
checkbox1->enabled=true; //有效時(shí)可以訪問(wèn)
if(checkbox1->checked == true && datetimetostr(datetimepicker4->datetime) == datetimetostr(now()))
{//判斷定時(shí)關(guān)機(jī)條件是否滿足
dword tmp;
//調(diào)用win api函數(shù)關(guān)閉計(jì)算機(jī)
exitwindowsex(ewx_shutdown,tmp);
}
}

