Tag: hibernate mode

如何在winforms应用程序中优雅地处理hibernate/睡眠模式?

我正在使用C#在.net中编写一个Windows窗体应用程序。 我遇到一个问题,如果我的程序在计算机进入睡眠和/或hibernate状态时运行(我不确定此时哪一个,或两者都导致问题),当机器再次唤醒时该程序只是挂起。 退出它的唯一方法是从任务管理器中终止进程。 出于显而易见的原因,这不是我希望程序运行的方式。 即使我只是在程序进入这些状态时关闭程序,那也没关系,但我不太清楚如何做到这一点,或者是否有更优雅的方式来处理这个问题。

无法捕捉睡眠/暂停消息(winXP)

我的应用程序需要阻止睡眠/hibernate模式。 我有代码,但成功捕获WM_POWERBROADCAST消息后, PBT_APMQUERYSUSPEND和PBT_APMQUERYSTANDBY都没有被成功捕获。 有趣的是,我的应用程序正在捕获PBT_APMRESUMECRITICAL和PBT_APMRESUMEAUTOMATIC消息。 底线问题:为什么我的应用程序无法捕获备用/暂停消息,但成功捕获恢复消息是否有任何原因? 这个Q&A [stackoverflow.com]有帮助,顺便说一句,但是这些消息似乎没有进入我的应用程序。 我的代码(为了简洁起见删除了事件日志代码): 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) { […]