Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>It works now, for both XP and Vista. I created a stub winform app with the relevant code (could be cleaned up, obviously, but it conveys the point).</p> <pre><code>using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace standbyTest { public partial class Form1 : Form { [DllImport("Kernel32.DLL", CharSet = CharSet.Auto, SetLastError = true)] protected static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE state); [Flags] public enum EXECUTION_STATE : uint { ES_CONTINUOUS = 0x80000000, ES_DISPLAY_REQUIRED = 2, ES_SYSTEM_REQUIRED = 1, ES_AWAYMODE_REQUIRED = 0x00000040 } public Form1() { if(Environment.OSVersion.Version.Major &gt; 5) { // vista and above: block suspend mode SetThreadExecutionState(EXECUTION_STATE.ES_AWAYMODE_REQUIRED | EXECUTION_STATE.ES_SYSTEM_REQUIRED | EXECUTION_STATE.ES_CONTINUOUS); } InitializeComponent(); //MessageBox.Show(string.Format("version: {0}", Environment.OSVersion.Version.Major.ToString() )); } protected override void OnClosed(EventArgs e) { base.OnClosed(e); if(Environment.OSVersion.Version.Major &gt; 5) { // Re-allow suspend mode SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS); } } protected override void WndProc(ref System.Windows.Forms.Message m) { // Power status event triggered if(m.Msg == (int)WindowMessage.WM_POWERBROADCAST) { // Machine is trying to enter suspended state if(m.WParam.ToInt32() == (int)WindowMessage.PBT_APMQUERYSUSPEND || m.WParam.ToInt32() == (int)WindowMessage.PBT_APMQUERYSTANDBY) { // Have perms to deny this message? if((m.LParam.ToInt32() &amp; 0x1) != 0) { // If so, deny broadcast message m.Result = new IntPtr((int)WindowMessage.BROADCAST_QUERY_DENY); } } return; } base.WndProc(ref m); } } internal enum WindowMessage { /// &lt;summary&gt; /// Notify that machine power state is changing /// &lt;/summary&gt; WM_POWERBROADCAST = 0x218, /// &lt;summary&gt; /// Message indicating that machine is trying to enter suspended state /// &lt;/summary&gt; PBT_APMQUERYSUSPEND = 0x0, PBT_APMQUERYSTANDBY = 0x0001, /// &lt;summary&gt; /// Message to deny broadcast query /// &lt;/summary&gt; BROADCAST_QUERY_DENY = 0x424D5144 } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload