.NET 中的 SetForegroundWindow 问题

2023-11-24

我在 .NET 中使用 PInvoke 使用 SetForegroundWindow API。

当我在 Visual Studio 中调试时使用 API 时,它工作得很好。但当应用程序正常运行时,它并不总是有效。

我在调用 SetForegroundWindow 之前放置了一些日志,并确认 API 正在被调用,但有时不会生效。我也看到了一些关于这个问题的帖子,但我想知道为什么它失败了。

帖子的链接如下:

  • Win32 SetForegroundWindow 不可靠
  • SetForegroundWindow 仅在 Visual Studio 打开时有效

事实上,这是一个纯粹的 Win32 问题,而不是 .net 特定的问题。 .net框架建立在Win32之上,这里Win32的规则正在向您反映。

的文档SetForegroundWindow全面解释您面临的问题。本质上是设计面临的问题SetForegroundWindow是它可以用于焦点窃取。焦点是用户应该控制的东西。改变焦点的应用程序可能会很麻烦。所以SetForegroundWindow尝试防御焦点窃取者。

文档说:

系统限制哪些进程可以设置前台窗口。 A 仅当满足以下条件之一时,进程才能设置前台窗口 条件为真:

  • 该进程是前台进程。
  • 该进程是由前台进程启动的。
  • 该进程接收到最后一个输入事件。
  • 没有前台进程。
  • 进程正在调试中。
  • 前台进程不是现代应用程序或开始屏幕。
  • 前景未锁定(请参阅LockSetForegroundWindow)。
  • 前台锁定超时已过期(请参阅 SystemParametersInfo 中的 SPI_GETFOREGROUNDLOCKTIMEOUT)。
  • 没有菜单处于活动状态。

当用户使用时,应用程序不能强制窗口到前台 正在使用另一个窗口。相反,Windows 会闪烁任务栏 窗口的按钮来通知用户。

您几乎肯定违反了这些标准。请注意,正在调试的进程始终被授予设置前台窗口的权限。这解释了为什么您在调试时没有看到任何问题。但在调试器之外,如果您的进程不是前台进程,则调用SetForegroundWindow fail.

这都是设计使然。您对此的反应应该是尝试提出一种不需要您尝试调用的设计SetForegroundWindow当您的进程不是前台进程时。

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

.NET 中的 SetForegroundWindow 问题 的相关文章

  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • 有人可以提供一个使用 Amazon Web Services 的 itemsearch 的 C# 示例吗

    我正在尝试使用 Amazon Web Services 查询艺术家和标题信息并接收回专辑封面 使用 C 我找不到任何与此接近的示例 所有在线示例都已过时 并且不适用于 AWS 的较新版本 有一个开源项目CodePlex http www c
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • Puppeteer 登录 page.evaluate 内

    我如何console log page evaluate中的某些内容 将其传递给节点并使用它during页面的评价 我实际上想将 page evaluate 的进度记录到控制台并向用户显示一些结果 puppeteer 12 的更新 改编自当
  • 画布被 CORS 数据和 S3 污染

    我的应用程序正在显示存储在AWS S3 出于安全原因 位于私人存储桶中 为了允许用户从浏览器中查看我生成的图像签名 URL like https s3 eu central 1 amazonaws com my bucket stuff i
  • Quartz 调度程序与设置 cron

    计划从设置 cron 作业转向 Quartz 调度程序 使用 Quartz 而不是设置 cron 的优点 缺点是什么 收到时间触发作业 Cron 还是 Quartz 关联 还有其他指点吗 我用过并且喜欢石英 以下是石英的一些优点 如果您使用
  • HTTP cookie 端口特定吗?

    我在一台机器上运行两个 HTTP 服务 我只是想知道他们是否共享 cookie 或者浏览器是否区分两个服务器套接字 当前的 cookie 规范是RFC 6265 它取代了RFC 2109 and RFC 2965 两个 RFC 现在都标记为
  • cygpath 无法将 Windows 路径转换为 ​​Linux 路径

    我正在尝试在 Windows 计算机上将文件路径转换为 Linux 和 Windows 之间的文件路径 windows 的 unix 路径工作正常 cygpath w cygdrive c CYGWIN CYGBuild build mak
  • Android - Google 云端硬盘 HTTP 请求

    我正在尝试编写一个可以将文件上传到 Google Drive 的应用程序 我选择通过原始 http 请求与此服务交互 因为我在 Android 上没有找到任何有用的 API 示例 而且它看起来比提供的库更轻量级 我用过https devel
  • 如何从 Eclipse 运行 Javah

    所以我试图在 Eclipse 中编译的 class 文件上运行 javah 工具 但我不知道该怎么做 我发现的例子只是说了一些类似 在你的类上运行 javah 的内容 但我真的不知道在 Eclipse 中哪里可以找到这样的命令行 如果有人能
  • 从句子生成 N 元语法

    如何生成字符串的 n 元语法 例如 String Input This is my car 我想用这个输入生成 n gram Input Ngram size 3 输出应该是 This is my car This is is my my
  • android 动态设置listview高度

    i have ExpandableListview inside ScrollView我知道这不好 但我也有 显示整个列表的唯一解决方案是使用代码设置其高度layoutParams relativeLayout LayoutParams 参
  • Angular Material mat-table 定义组件中可重用的列

    有人知道是否可以创建一个与 mat table 一起使用的 列 组件 我尝试为常用的列定义创建一个组件 但是在添加到表时出现错误 无法找到列选择器 我的列定义如下 Component selector iam select column t
  • 在 python 3.5 中模拟异步调用

    如何使用以下命令模拟从一个本机协程到另一个协程的异步调用unittest mock patch 我目前有一个相当尴尬的解决方案 class CoroutineMock MagicMock def await self args kwargs
  • 制作适合打印的 ASP.NET 页面的最佳方法?

    我只是好奇大多数人如何使他们的 ASP NET 页面适合打印 您是否使用 CSS 或其他内容创建单独的适合打印的 ASPX 页面版本 您如何处理分页符和宽表等情况 是否有一种适用于大多数情况的优雅解决方案 您基本上可以创建另一个 CSS 文
  • 温莎城堡的多接口注入

    当容器中有多个实现时 如何让温莎城堡在运行时选择正确的接口植入 例如 假设我有一个名为 IExamCalc 的简单界面 它可以通过计算来了解某人在该考试中的表现 不 我们有几种实现方式 如下所示 public interface IExam
  • 如何将Appium与C#集成?

    我找不到一篇可以在 C 中使用 appium 自动化移动测试的帖子 我已经在规范流中编写了我的网站自动化代码 我也可以重复使用它吗 Appium 提供了dotnet appium 驱动程序这是与 Appium 交互的 API 您可以使用它来
  • .svg url 到 UIImage iOS

    我从服务器获取 svg 网址 如何将 NSData 从 svg url 转换为 UIImage 我得到的网址类似于 https storage googleapis com pgcdn ca svg lock svg 我正在使用这段代码 N
  • Zend 框架用户身份验证与 Twitter 和 Facebook 集成

    是否有基于 ZF 的脚本 支持普通用户注册 登录系统 以及通过 Twitter 和 Facebook 进行用户身份验证 看一下Zend Framework 1 11 中的 OpenID Facebook 和 Twitter 身份验证示例 不
  • 如何定义“类型析取”(联合类型)?

    一种方法有被建议处理重载方法的双重定义就是用模式匹配代替重载 object Bar def foo xs Any xs foreach case String gt println str case Int gt println int c
  • C# 在 AD 中链接组策略

    如何在AD中设置组策略 我可以创建我的 OU 但我还需要附加链接到它的组策略 这就是我到目前为止所拥有的 string strOU OU test454545 OU Clients OU Clients DC domain DC net G
  • Jquery 树形图 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在寻找可以执行以下任务的 javascript 或 jquery 解决方案 1 Dynamically generate tree hierarchy structure o
  • .NET 中的 SetForegroundWindow 问题

    我在 NET 中使用 PInvoke 使用 SetForegroundWindow API 当我在 Visual Studio 中调试时使用 API 时 它工作得很好 但当应用程序正常运行时 它并不总是有效 我在调用 SetForegrou