首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

C++Builder 實作定時自動關機工具:完整原始碼與核心邏輯解析

     編輯:VC 教學

專案背景與需求

大型檔案下載常需數小時,使用者希望設定好關機時間後即可安心就寢。本工具提供直觀介面,支援日期/時間精準設定、倒數計時顯示、自動關機執行。

介面佈局設計

群組元件屬性關鍵設定用途
GroupBox1「目前系統時間」DateTimePicker1Kind=dtkDate即時顯示系統日期/時間
DateTimePicker2Kind=dtkTime
GroupBox2「預設關機時間」DateTimePicker3Kind=dtkDate設定目標關機日期/時間
DateTimePicker4Kind=dtkTime
CheckBox1Caption="自動關機生效", Enabled=False啟用/關閉定時任務
Timer1Interval=1000 (1秒)核心輪詢邏輯

核心程式碼實現

FormCreate 初始化

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    CheckBox1->Checked = false;
    CheckBox1->Enabled = false;          // 預設禁用,待時間合法才啟用
    DateTimePicker1->DateTime = Now();   // 系統日期
    DateTimePicker2->DateTime = Now();   // 系統時間
    DateTimePicker3->DateTime = Now();   // 關機日期初值
    DateTimePicker4->DateTime = Now();   // 關機時間初值
}

Timer1Timer 核心輪詢(每秒執行)

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    // 1. 即時更新系統時間顯示
    DateTimePicker1->DateTime = Now();
    DateTimePicker2->DateTime = Now();

    // 2. 驗證設定時間是否已過期
    if (DateTimePicker4->DateTime < Now()) {
        CheckBox1->Checked = false;
        CheckBox1->Enabled = false;
    } else {
        CheckBox1->Enabled = true;
    }

    // 3. 觸發關機條件判斷
    if (CheckBox1->Checked && 
        DateTimeToStr(DateTimePicker4->DateTime) == DateTimeToStr(Now())) 
    {
        DWORD tmp;
        ExitWindowsEx(EWX_SHUTDOWN, tmp); // 呼叫 Win32 API 關機
    }
}

日期/時間聯動與驗證邏輯

DateTimePicker3/4 的 OnChange 事件雙向同步,確保日期與時間元件一致,並即時檢查有效性:

void __fastcall TForm1::DateTimePicker3Change(TObject *Sender)
{
    DateTimePicker4->DateTime = DateTimePicker3->DateTime; // 日期聯動
    if (DateTimePicker4->DateTime < Now()) {
        CheckBox1->Checked = false;
        CheckBox1->Enabled = false;
    } else CheckBox1->Enabled = true;
}
// DateTimePicker4Change 邏輯對稱

進階功能:倒數計時顯示

在 Timer1Timer 中新增:

TDateTime preset = DateTimePicker3->DateTime;
TDateTime current = Now();
Edit1->Text = IntToStr((int)((preset - current) * 86400)); // 剩餘秒數

放置一個 Edit1 即可顯示動態倒數。

關鍵技術點總結

  • Win32 API 整合: ExitWindowsEx(EWX_SHUTDOWN, ...) 實現系統級關機。
  • 時間比較精度: 使用 DateTimeToStr 將精度對齊至秒,避免毫秒誤差導致漏觸發。
  • 防呆設計: 過期時間自動禁用勾選框,杜絕誤操作。
  • 資源釋放: 程式結束前無需額外清理,系統自動回收。

定時關機工具介面截圖

此專案展示了 C++Builder 快速構建系統工具的能力,核心邏輯清晰,易於擴展(如新增休眠、重啟、鎖定工作站等選項)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved