【问题标题】:Launch System Screensaver from C# Windows Form从 C# Windows 窗体启动系统屏幕保护程序
【发布时间】:2010-09-21 00:43:41
【问题描述】:

希望这是一个简单的,但谁能提供一些简单的 c# 代码来启动当前配置的屏幕保护程序?

【问题讨论】:

    标签: c# screensaver


    【解决方案1】:

    这是一个很好的网站,展示了如何使用屏幕保护程序的各个方面。启动屏幕保护程序的代码见末尾的 cmets。

    http://www.codeproject.com/KB/cs/ScreenSaverControl.aspx

        [DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
        private static extern IntPtr GetDesktopWindow();
    
        [DllImport("user32.dll")]
        private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
    
        //...
    
        private const int SC_SCREENSAVE = 0xF140;
        private const int WM_SYSCOMMAND = 0x0112;
    
        //...
    
        public static void SetScreenSaverRunning()
        {
        SendMessage
    
    (GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
    }
    

    【讨论】:

    • PInvoke 签名不正确。 wParam 和 lParam 都应该输入 IntPtr
    • 该代码在 SendMessage 中为 w 和 l 参数使用 int,但正如其所写的那样,const int 不适用于 IntPtrs。
    • 感谢您的更改。这台电脑上没有 IDE 来测试。对社区和在线内容充满信心。再次感谢:-)
    • 参数 '3':无法从 'int' 转换为 'System.IntPtr' - 将 James 的代码编辑回整数,它在 IntPtr 编辑之前正确运行。
    • 它在 32 位机器上正常运行,但在 64 位机器上会惨遭失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多