Ứng dụng của tôi cần chặn chế độ ngủ/ngủ đông. Tôi có mã tại chỗ, nhưng sau khi bắt được thành công thông báo WM_POWERBROADCAST, không phải PBT_APMQUERYSUSPEND hoặc PBT_APMQUERYSTANDBY đang bị bắt gặp thành công. Điều thú vị là, PBT_APMRESUMECRITICAL và PBT_APMRESUMEAUTOMATIC tin nhắn là bị ứng dụng của tôi chặn lại.Không thể bắt giấc ngủ/treo tin nhắn (winXP)
Câu hỏi cuối cùng: có bất kỳ lý do nào khiến ứng dụng của tôi không thể nhận thông báo dự phòng/tạm dừng nhưng thành công trong việc thu thập thông báo tiếp tục không?
Điều này Q&A [stackoverflow.com] đã giúp, btw, nhưng một lần nữa, các thông báo dường như không biến nó thành ứng dụng của tôi.
Mã của tôi (w/sự kiện mã đăng nhập loại bỏ cho ngắn gọn):
protected override void WndProc(ref System.Windows.Forms.Message m)
{
// Power status event triggered
if (m.Msg == (int)NativeMethods.WindowMessage.WM_POWERBROADCAST)
{
// Machine is trying to enter suspended state
if (m.WParam.ToInt32() == (int)NativeMethods.WindowMessage.PBT_APMQUERYSUSPEND ||
m.WParam.ToInt32() == (int)NativeMethods.WindowMessage.PBT_APMQUERYSTANDBY)
{
// Have perms to deny this message?
if((m.LParam.ToInt32() & 0x1) != 0)
{
// If so, deny broadcast message
m.Result = new IntPtr((int)NativeMethods.WindowMessage.BROADCAST_QUERY_DENY);
}
}
return; // ?!
}
base.WndProc(ref m);
}
Còn WPF thì sao? – Alessio