问题说明:
最近开发了一个程序,运行良好,昨天发现当程序运行的过程中.无操作时,屏保自动运行.等屏保结束时.我的程序崩溃与否要看是否设置了屏保恢复密码.
1.未设置: 程序运行依然良好.
2.已设置: 程序崩溃,只说****遇到问题需要关闭.捕捉不到任何异常.大家帮忙分析一下是什么原因呢.另外想请高人指点一下: 在程序开始运行的时候怎么检测屏保的状态是否开启.如果是开启状态那怎么用C#代码关掉屏保.等程序结束时再恢复以前的状态.

解决方案 »

  1.   

    ...没人`~?~?~ 郁闷.....我的程序是3D程序...采用Quest3D...
      

  2.   

    private   const   uint   SPI_GETSCREENSAVERRUNNING   =   0x0072;   
        
      [DllImport("user32.dll",   CharSet=CharSet.Auto)]   
      private   static   extern   bool   SystemParametersInfo(uint   uiAction,   uint   uiParam,   ref   bool   pvParam,   uint   fWinIni);   
        
      ///   <summary>   
      ///   获得当前屏幕保护程序的状态   
      ///   </summary>   
      ///   <returns>屏幕保护程序正在运行返回true;不再运行返回false</returns>   
      public   static   bool   GetScreenSaverState()   
      {   
      //IntPtr   result   =   new   IntPtr();   
      bool   result   =   false;   
      SystemParametersInfo(SPI_GETSCREENSAVERRUNNING,   0,   ref   result,   0);   
      //System.Diagnostics.Trace.WriteLine(result);   
      return   (result);   
      }  
      

  3.   

    可以用API暂时禁用屏保,等程序结束时再恢复以前的状态:
            const uint SPI_SETSCREENSAVEACTIVE = 0x0011;        [System.Runtime.InteropServices.DllImport("User32")]
            extern static bool SystemParametersInfoW(uint uiAction, uint uiParam, IntPtr pvParam, uint fWinIni);        {
                SystemParametersInfoW(SPI_SETSCREENSAVEACTIVE, 0, IntPtr.Zero, 0);  //禁用
                //...
                SystemParametersInfoW(SPI_SETSCREENSAVEACTIVE, 1, IntPtr.Zero, 0);  //启用
            }