以编程方式阻止 Windows 屏幕保护程序启动

2024-03-18

是否有推荐的方法来阻止 Windows 屏幕保护程序启动?我发现的最接近的是本文 http://www.codeproject.com/KB/cs/ScreenSaverControl.aspx,但我真正想做的只是告诉 Windows 计算机没有空闲,而不是愚弄当前设置的屏幕保护程序值。


为了进行测试,我将屏幕保护程序设置为 1 分钟并需要密码。

我尝试捕获 SC_SCREENSAVE 并在 VB .Net 中返回 -1。正如评论的那样,它在没有屏幕保护程序密码的情况下有效,但是fails如果屏幕保护程序密码处于活动状态。 (我在Windows XP 中尝试过)。我还将其放入计时器的滴答事件中,每 1000 毫秒一次:

Static dir As Integer = 4
Cursor.Position = Cursor.Position + New Size(dir, dir)
dir = -dir

这不起作用。光标来回晃动,1 分钟后屏幕保护程序会短暂闪烁,然后关闭。屏幕保护程序只打开一会儿,不足以要求输入密码。但闪光灯还是很难看。

Then我尝试使用user32.dll的SetCursorPos和GetCursorPos。您可以在 pinvoke 上查找它们。与上面的结果相同。

Then我查看了这个问题其他地方提到的“JiggleMouse”的代码。 JiggleMouse 使用 SendInput。发送输入有效!屏幕保护程序没有闪烁。我在计时器内调用了 SendInput,每 50 秒触发一次(略小于屏幕保护程序的最小超时时间 60 秒)。将鼠标移动 0,0 增量就足够了,没有真正的移动。那does工作。放入 Tick 事件的代码:

Dim i(0) As INPUT
i(0).dwType = INPUT.InputType.INPUT_MOUSE
i(0).mkhi = New MOUSEKEYBDHARDWAREINPUT
i(0).mkhi.mi = New MOUSEINPUT
i(0).mkhi.mi.dx = 0
i(0).mkhi.mi.dy = 0
i(0).mkhi.mi.mouseData = 0
i(0).mkhi.mi.dwFlags = MOUSEINPUT.MouseEventFlags.MOUSEEVENTF_MOVE
i(0).mkhi.mi.time = 0
i(0).mkhi.mi.dwExtraInfo = IntPtr.Zero
SendInput(1, i(0), Marshal.SizeOf(i(0)))

这来自 pinvoke.com:

Public Declare Function SendInput Lib "user32" (ByVal nInputs As Integer, ByRef pInputs As INPUT, ByVal cbSize As Integer) As Integer

Public Structure INPUT
    Enum InputType As Integer
        INPUT_MOUSE = 0
        INPUT_KEYBOARD = 1
        INPUT_HARDWARE = 2
    End Enum

    Dim dwType As InputType
    Dim mkhi As MOUSEKEYBDHARDWAREINPUT
End Structure

Public Structure MOUSEINPUT
    Enum MouseEventFlags As Integer
        MOUSEEVENTF_MOVE = &H1
        MOUSEEVENTF_LEFTDOWN = &H2
        MOUSEEVENTF_LEFTUP = &H4
        MOUSEEVENTF_RIGHTDOWN = &H8
        MOUSEEVENTF_RIGHTUP = &H10
        MOUSEEVENTF_MIDDLEDOWN = &H20
        MOUSEEVENTF_MIDDLEUP = &H40
        MOUSEEVENTF_XDOWN = &H80
        MOUSEEVENTF_XUP = &H100
        MOUSEEVENTF_WHEEL = &H800
        MOUSEEVENTF_VIRTUALDESK = &H4000
        MOUSEEVENTF_ABSOLUTE = &H8000
    End Enum

    Dim dx As Integer
    Dim dy As Integer
    Dim mouseData As Integer
    Dim dwFlags As MouseEventFlags
    Dim time As Integer
    Dim dwExtraInfo As IntPtr
End Structure

Public Structure KEYBDINPUT
    Public wVk As Short
    Public wScan As Short
    Public dwFlags As Integer
    Public time As Integer
    Public dwExtraInfo As IntPtr
End Structure

Public Structure HARDWAREINPUT
    Public uMsg As Integer
    Public wParamL As Short
    Public wParamH As Short
End Structure

Const KEYEVENTF_EXTENDEDKEY As UInt32 = &H1
Const KEYEVENTF_KEYUP As UInt32 = &H2
Const KEYEVENTF_UNICODE As UInt32 = &H4
Const KEYEVENTF_SCANCODE As UInt32 = &H8
Const XBUTTON1 As UInt32 = &H1
Const XBUTTON2 As UInt32 = &H2

<StructLayout(LayoutKind.Explicit)> Public Structure MOUSEKEYBDHARDWAREINPUT
    <FieldOffset(0)> Public mi As MOUSEINPUT
    <FieldOffset(0)> Public ki As KEYBDINPUT
    <FieldOffset(0)> Public hi As HARDWAREINPUT
End Structure
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式阻止 Windows 屏幕保护程序启动 的相关文章

随机推荐

  • 如何从命令行调用带参数的 mysql 存储过程?

    如何从命令行调用存储过程 我有一个程序 CREATE DEFINER root localhost PROCEDURE insertEvent IN dateTimeIN DATETIME NO SQL BEGIN SET eventIDO
  • 为什么我在使用 Ionic Framework 插件 healthkit 时收到错误plugin_not_installed?

    我已经使用 Ionic Framework 一段时间了 但最近遇到了这个错误plugin not installed对于 Health Kit 插件 我知道我有基于我的ionic cordova plugin list output ion
  • 批量插入时如何自动截断字符串?

    我想将许多行 从实体框架对象构造 插入到 SQL Server 问题是 某些字符串属性的长度超过了数据库中列的长度 这会导致异常 然后所有行将无法插入到数据库中 所以我想知道是否有办法告诉 SqlBulkCopy 自动截断任何超长的行 当然
  • 使用加法、减法和减半计算三角根

    特定游戏的规则是角色的力量与角色的力量成正比 三角根 https math stackexchange com q 698961 93170角色的经历 例如 15 20经验获得5力量 21 27经验获得6力量 28 35经验获得7力量等等
  • UIWebView 以更有效的方式减少加载时间

    我正在下载多个 html 并将它们作为字符串保存在本地NSArray 然后我用3UIWebViews加载内容 用户总是看到一个UIWebView还有 2 个UIWebViews使用以下方式在后台加载 firstWebView loadHTM
  • 将属性添加到 php 中对象顶部的 stdClass

    当创建一个对象时php用于返回 JSON 是否可以添加一个属性并强制它位于顶部 我想要这个 因为该对象是通过 API 公开的 并且最好在顶部有 id 例如 obj new stdClass obj gt name John obj gt a
  • 如何在 C++ 中限制生成的程序可以使用的内存量

    在我的 C 程序中 我将启动其他程序 如果这些程序使用超过一定量的内存 我希望我的程序杀死它们的进程 那怎么办呢 我可能会使用 execv 来启动程序 假设您使用的是 POSIX 系统 您可以通过调用来限制这一点setrlimit 2 af
  • Linux 上的 .NET core X509Store

    使用 NET Core 2时 Linux中的证书文件位于哪里X509Store 在 Windows 上 可以从管理控制台访问证书certlm msc或与New SelfSignedCertificate在 powershell 中 使用 N
  • 为什么 Xcode 6 将动态链接编辑器库中的自动完成功能保持为 TRUE?

    我仍在学习 Swift 和 iOS 开发 但我一直遇到这个问题 尽管我尝试深入了解一下 但我仍然有点困惑 当我开始打字时trueXcode 6 建议自动完成TRUE 不是世界末日 然而 有一次我决定看看如果我使用会发生什么TRUE结果给了我
  • Spring尤里卡中的instanceid是什么?

    我读到 Eureka 客户端的实例 ID 必须是唯一的 当我们希望运行同一 Eureka 客户端的多个实例时 我们添加此属性 eureka instance instance id spring cloud client hostname
  • 如何依次请求多个权限?

    我的应用程序需要访问CAMERA and 写外部存储权限 一旦我的应用程序加载 我想要求用户依次允许这两个权限 我有这个代码 if ContextCompat checkSelfPermission this Manifest permis
  • 如何仅提取 .tar.gz 成员的文件?

    我的目标是打开包装 tar gz文件 而不是指向该文件的子目录 我的代码基于此question https stackoverflow com questions 4917284 extract files from zip without
  • 图论。如何处理此类问题?我想知道解决这个问题时的逻辑和思考方式。

    求笛卡尔平面上从 0 0 到 n n 的路径数 该路径永远不会高于 y x 线 可以沿着路径进行三种类型的移动 move up i e from i j to i j 1 move to the right i e from i j to
  • Lua中字符串的串联

    在许多语言中 您可以在变量赋值时连接字符串 我有一个使用 Lua 编程语言的场景 我需要将命令的输出附加到现有变量 Lua 中是否有与以下示例等效的功能 其他语言的例子 PERL filename checkbook filename tm
  • C# 带有 new 和 get 整数的构造函数

    这是 Unity 5 5 0 上的结构我对 C 很陌生 不太了解属性和结构 这会在分配期间出现错误this X 我假设您无法更改结构上的值 并且关键字 this 指的是结构的属性 在控制返回给调用者之前 必须完全分配自动实现的属性 Poin
  • 返回php文件中图像的内容?

    我真的不懂 PHP 但我想做一件简单的事情 我从 a 中访问 php 页面 img src myhumbleimage php 我想要从另一个 URL 返回图像 我想出了
  • 什么是布尔标志

    我正在学习 Visual Basic 2010 课程 并试图掌握这个称为 标志 的新术语 我有点理解它与布尔条件有关 我不太明白flag是什么 我看到使用术语 标志 来引用它 我知道当布尔值 条件触发标志时 它会发生一些事情 但旗帜是什么
  • 如何在android sqlite中删除单行

    I have sqlite数据表示在ListView by a CustomListAdapter 单击一行时alert dialogue弹出提示用户删除单行sqlite在我的活动中 private void deleteDialog Al
  • 如何在多 HttpSecurity 情况下返回 http 状态代码而不是登录页面

    我有一个 Spring Boot 应用程序 它通过以下方式提供 HTML 页面服务 还有rest api通过 api 前者需要通过登录表单登录 后者需要HTTP基本身份验证 因此 我配置了两个HttpSecurity部分如下 Configu
  • 以编程方式阻止 Windows 屏幕保护程序启动

    是否有推荐的方法来阻止 Windows 屏幕保护程序启动 我发现的最接近的是本文 http www codeproject com KB cs ScreenSaverControl aspx 但我真正想做的只是告诉 Windows 计算机没