SetForegroundWindow:ForegroundLockTimeout 注册表值和 SPI_GETFOREGROUNDLOCKTIMEOUT WinAPI 参数之间的关系

2024-02-24

Context:

  • 这个问题是关于如何通过配置控制是否允许编程跨进程窗口激活(使窗口成为具有输入焦点的前台窗口),通过SetForegroundWindow https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setforegroundwindowWinAPI函数。

看来SPI_GETFOREGROUNDLOCKTIMEOUT / SPI_SETFOREGROUNDLOCKTIMEOUT与使用的值SystemParametersInfo https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfowWinAPI函数对应ForegroundLockTimeout https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc957208(v=technet.10)持久的、每用户注册表值(在HKEY_CURRENT_USER\Control Panel\Desktop).
前台锁定超时是交互式用户输入之后跨进程窗口激活的时间段。not允许的。

我的期望如下:

  • The 有效的会话中的值是报告的值SPI_GETFOREGROUNDLOCKTIMEOUT,这可能与底层不同ForegroundLockTimeout注册表值,如果非持久更新是通过SPI_SETFOREGROUNDLOCKTIMEOUT (fWinIni参数设置为0)

  • 下次登录时,这两个值应恢复同步。

这个期望是not遇到以下情况:

  • 在 Windows 上11, the SPI_GETFOREGROUNDLOCKTIMEOUT always报告2147483647(有符号 32 位整数的最大值)登录时 - 即使ForegroundLockTimeout注册表默认值为200000

    • Update:该行为是在ARMW11 ISO 映像通过适用于 M1 Mac 的 VMWare Fusion 技术预览,截至 2022 年 9 月 16 日。

    • While 非持久 SPI_SETFOREGROUNDLOCKTIMEOUT更新是可能的,尝试坚持不懈地改变有效的SPI_GETFOREGROUNDLOCKTIMEOUT未来会话的价值是悄悄地忽略.

    • 实际上,新用户会话默认为not允许无条件窗口激活。

  • 在 Windows 上10,我观察到类似的行为一个特定的用户帐户:

    • 该行为与 Windows 11 上相同,不同之处在于0是默认值SPI_GETFOREGROUNDLOCKTIMEOUT值,无法持久更改。实际上,该用户的新会话默认允许无条件的窗口激活。

    • Another同一台机器上的用户帐户not表现出这种行为 - 在那里,上述期望得到满足。

    • 该机器是not在开发者模式下;具有不同行为的帐户是管理员,而另一个则不是 - 但我认为这并不重要。

我的问题:

  • 是观察到的Windows11预期的行为?如果是这样,它是否记录在某处?

  • 在 Windows 上10,对于任性的用户账号的行为有何解释?有没有another持久设置会覆盖预期行为吗?


  • In Windows 10+, the registry-based setting (value ForegroundLockTimeout in HKEY_CURRENT_USER\Control Panel\Desktop) is no longer respected, and the invariable default value in a new session is [int]::MaxValue,[1] which in effect disables programmatic activation of windows by processes other than those that happen to run in the current foreground window.

  • 就我而言,它恰好是一个第三方应用程序配置为运行每次登录时(通过注册表项HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run) that 设置非持久化SPI_GETFOREGROUNDLOCKTIMEOUT价值0 on a 每个会话 basis: 自动热键 http://www.autohotkey.com/


[1] This value in milliseconds amounts to a duration of 24+ days(!) of the system having to be idle (in terms of user input) before a non-foreground process is allowed to activate another window, which in effect amounts to disabling such activations.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SetForegroundWindow:ForegroundLockTimeout 注册表值和 SPI_GETFOREGROUNDLOCKTIMEOUT WinAPI 参数之间的关系 的相关文章

随机推荐

  • JavaFX 菜单栏中的菜单右对齐

    In Java Swing可以使用以下方法将菜单放在菜单栏的右侧 menubar add menu1 menubar add Box createHorizontalGlue menubar add menu2 这将把menu1在左边和me
  • 如何播放 MP3 文件? [复制]

    这个问题在这里已经有答案了 我正在尝试访问MP3 http en wikipedia org wiki MP3音频文件保存在我的源文件夹中 以便我可以在 Java 程序 应用程序 而不是小程序 中播放它 我似乎遇到的问题是我无法导入java
  • HTML5在画布上拖放路径,无需JS库

    我想在 HTML5 画布上拖放路径 如果我们点击形状 我没有发现任何类似 SVG 提供事件的东西 有人知道我如何在这里处理路径项上的事件吗 我想在没有任何java脚本库的情况下做到这一点 以下是我当前绘制路径的代码 var canvas d
  • MongoDB索引定义策略

    我有一个基于 MongoDB 的数据库 里面有大约 100K 到 500K 文本文档 并且该集合不断增长 系统应支持文档不同字段的查询 例如 标题 类别 重要性等 该系统是一个近乎实时的系统 每 5 10 分钟就会获取新文档 为了提高查询性
  • 引用具有动态工作表名称的另一个工作簿

    我想引用另一个工作簿和一个依赖于某些单元格值的特定工作表 这个方程有效 S 停机时间 11 Nov 2013 Downtime Tracker xls 30 F 12 但值 Nov 和 30 是动态的 它们分别取决于 D13 和 E13 的
  • C getopt 多个值

    我的论点是这样的 a out i file1 file2 file3 我该如何利用getopt 获取 3 个 或更多 输入文件 我正在做这样的事情 while opt getopt argc argv i xyz 1 case i inpu
  • 如何从范围滑块获取多个值 - bootstrap-slider.js

    我正在使用 bootstrap slider js http www eyecon ro bootstrap slider http www eyecon ro bootstrap slider 给我范围滑块功能 我在一页上有 9 个滑块
  • 删除seaborn线图图例标题

    我想从我的seaborn lineplot 图例中删除标题 我尝试使用这个答案 https stackoverflow com a 45335602 2970186无济于事 import matplotlib pyplot as plt i
  • 我们可以对类型类进行抽象吗?

    我想知道我们不能对类型类进行抽象是否有更深层次的原因 或者我们可以吗 例如 当我们有 fzip forall a a gt a gt b gt c gt b c fzip f xs ys zip f xs f ys 那么我们可以说 fzip
  • 无法让 git 与 iconv 和 utf-16 很好地配合

    我试图让 git 将 UTF 16 识别为文本 以允许我本地比较和修补文本 但我无法获取textconv参数来工作 我可以手动调用 iconv f utf 16 t utf 8 some utf 16 file rc 一切都很好 但是如果我
  • 如何获取 CodenameOne TextField 中每次更改的事件

    我正在使用 CodenameOne 构建一个应用程序 并希望使用 TextField 来过滤一长串项目 我尝试使用 DataChangedListener 如建议的那样https www codenameone com javadoc co
  • 如何获取 QTreeWidget 的项目数

    我创建了一个 QTreeWidget 我正在尝试列出所有显示的项目 如果该项目有子项但未扩展 我不想进入该项目 它确实获取了我在树中可以看到的项目数量 我努力了 for int i 0 i lt MyTreeWidget gt topLev
  • iOS客户端服务器方法

    我熟悉其他平台上用于点对点或客户端 服务器消息传递的 SOAP 和 Web 服务 苹果的消息传递功能是什么 我正在尝试组装一个应用程序服务器来管理协作工作环境 LAN 上平均有 200 个 最多 1000 个移动客户端 例如 一台 Mac
  • Android 从自己的服务器自动更新

    我一直在寻找一个很好的例子 如何更新我自己开发的应用程序 因此 我的设备上安装了一个 apk 当我启动它时 我想检查我的服务器上是否存在任何更新 如果是 则从网络服务器下载并安装 首先我必须检查我的服务器是否有任何更新 如果是 则下载并安装
  • 在Android(使用Java)中,如何设置铃声音量(指定的数字)?

    因此 在我的应用程序中 我有一个搜索栏 允许用户设置铃声音量 0 100 我似乎找不到将铃声音量设置为指定数字的方法 我浏览了音频管理器 http d android com reference android media AudioMan
  • 如何使用 MapKit 绘制两个位置之间的路线并绘制要点?

    我正在使用 MapKit api 获取地图上的当前位置 并绘制由落针指向的两个位置之间的路线 我还想获取其路线之间的所有主要看台 我正在使用下面的函数来获取两个位置之间的路线 NSArray getRoutePointFrom MyLoca
  • 如何使用 Rust SDK 在 Aptos 上执行 Move 脚本?

    我想执行这个 Move 脚本 例如在sources top up move script use std signer use aptos framework aptos account use aptos framework aptos
  • 用C语言创建进程树

    我将如何创建一个看起来像深度为 N 的平衡三元树的流程层次结构 意味着每个进程有 3 个子进程 因此深度 N 的树中将有 3 N 1 2 个进程 要创建新进程 我只想使用 fork 这是我到目前为止所拥有的 但我认为它不起作用 因为我不处理
  • 如果缓冲区大小超过 256,第二个 MPI_Send 将挂起

    int n j i i2 i3 rank size rowChunk cells cellChunk MPI Status status MPI Init argc argv MPI Comm rank MPI COMM WORLD ran
  • SetForegroundWindow:ForegroundLockTimeout 注册表值和 SPI_GETFOREGROUNDLOCKTIMEOUT WinAPI 参数之间的关系

    Context 这个问题是关于如何通过配置控制是否允许编程跨进程窗口激活 使窗口成为具有输入焦点的前台窗口 通过SetForegroundWindow https learn microsoft com en us windows win3