用戶選擇關機時,系統向所有頂層窗口發送 WM_QUERYENDSESSION。返回 0 (FALSE) 即可取消關機,返回 1 (TRUE) 允許關機。
.hpp)
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_QUERYENDSESSION, TMessage, OnWMQueryEndSession)
END_MESSAGE_MAP(TForm)
void __fastcall OnWMQueryEndSession(TMessage &Message);
.cpp)
void __fastcall TForm1::OnWMQueryEndSession(TMessage &Message) {
if (CheckBox1->Checked) // 用戶勾選「允許關機」
Message.Result = 1;
else
Message.Result = 0; // 否則攔截關機
}
將 CheckBox1->Checked 替換為業務邏輯標志位 (如安裝完成、數據保存完畢),在關鍵操作期間自動禁用關機,操作結束後恢復。