关于终止屏幕保护程式,与屏幕保护程式的操作

关于终止屏幕保护程式,与屏幕保护程式的操作

public static class ScreenSaver
        {
            // Signatures for unmanaged calls
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            private static extern bool SystemParametersInfo(
               int uAction, int uParam, ref int lpvParam,
               int flags);

            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern bool SystemParametersInfo(
               int uAction, int uParam, ref bool lpvParam,
               int flags);

            [System.Runtime.InteropServices.DllImport("User32")]
            public extern static bool SystemParametersInfoW(uint uiAction, uint uiParam, IntPtr pvParam, uint fWinIni);

            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern int PostMessage(IntPtr hWnd,
               int wMsg, int wParam, int lParam);

            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            private static extern IntPtr OpenDesktop(
               string hDesktop, int Flags, bool Inherit,
               uint DesiredAccess);

            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            private static extern bool CloseDesktop(
               IntPtr hDesktop);

            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            private static extern bool EnumDesktopWindows(
               IntPtr hDesktop, EnumDesktopWindowsProc callback,
               IntPtr lParam);

            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            private static extern bool IsWindowVisible(
               IntPtr hWnd);

            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern IntPtr GetForegroundWindow();

            // Callbacks
            private delegate bool EnumDesktopWindowsProc(
               IntPtr hDesktop, IntPtr lParam);

            // Constants
            private const int SPI_GETSCREENSAVERACTIVE = 16;
            private const int SPI_SETSCREENSAVERACTIVE = 17;
            private const int SPI_GETSCREENSAVERTIMEOUT = 14;
            private const int SPI_SETSCREENSAVERTIMEOUT = 15;
            private const int SPI_GETSCREENSAVERRUNNING = 114;
            private const int SPIF_SENDWININICHANGE = 2;
            //private const int SPI_GETSCREENSAVERRUNNING = 0x0072;

            private const uint DESKTOP_WRITEOBJECTS = 0x0080;
            private const uint DESKTOP_READOBJECTS = 0x0001;
            private const int WM_CLOSE = 16;

            public static IntPtr Getlockwindows()
            {
                IntPtr htop = OpenDesktop("Winlogon", 0, false, 0x0004 | 0x0002 | 0x0040 | 0x0008 | 0x0020 | 0x0010 | 0x0001 | 0x0100 | 0x0080);
                return htop;
            }

            // Returns TRUE if the screen saver is active 
            // (enabled, but not necessarily running).
            public static bool GetScreenSaverActive()
            {
                bool isActive = false;

                SystemParametersInfo(SPI_GETSCREENSAVERACTIVE, 0,
                   ref isActive, 0);
                return isActive;
            }

            // Pass in TRUE(1) to activate or FALSE(0) to deactivate
            // the screen saver.
            public static void SetScreenSaverActive(int Active)
            {
                int nullVar = 0;

                SystemParametersInfo(SPI_SETSCREENSAVERACTIVE,
                   Active, ref nullVar, SPIF_SENDWININICHANGE);
            }

            // Returns the screen saver timeout setting, in seconds
            public static Int32 GetScreenSaverTimeout()
            {
                Int32 value = 0;

                SystemParametersInfo(SPI_GETSCREENSAVERTIMEOUT, 0,
                   ref value, 0);
                return value;
            }

            // Pass in the number of seconds to set the screen saver
            // timeout value.
            public static void SetScreenSaverTimeout(Int32 Value)
            {
                int nullVar = 0;

                SystemParametersInfo(SPI_SETSCREENSAVERTIMEOUT,
                   Value, ref nullVar, SPIF_SENDWININICHANGE);
            }

            // Returns TRUE if the screen saver is actually running
            public static bool GetScreenSaverRunning()
            {
                bool isRunning = false;

                SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0,
                   ref isRunning, 0);
                return isRunning;
            }
            
            public static void KillScreenSaver()
            {
                IntPtr hDesktop = OpenDesktop("Screen-saver", 0,
                   false, DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS);
                if (hDesktop != IntPtr.Zero)
                {
                    EnumDesktopWindows(hDesktop, new
                       EnumDesktopWindowsProc(KillScreenSaverFunc),
                       IntPtr.Zero);
                    CloseDesktop(hDesktop);
                }
                else
                {
                    PostMessage(GetForegroundWindow(), WM_CLOSE,
                       0, 0);
                }
            }

            private static bool KillScreenSaverFunc(IntPtr hWnd,
               IntPtr lParam)
            {
                if (IsWindowVisible(hWnd))
                    PostMessage(hWnd, WM_CLOSE, 0, 0);
                return true;
            }
        }

此文仅用于记录,对屏幕保护程式的操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值