问题标签 [setforegroundwindow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
313 浏览

c# - 如何检测 SetForegroundWindow 是否更改屏幕分辨率?

我正在用 C# 编写Alt+Tab替换,并且在使用全屏应用程序时遇到问题。

有没有办法检测SetForegroundWindow(hWnd)来电是否会改变屏幕分辨率?或者等效地,如果hWnd是全屏应用程序?我想等到解决方案更改完成,或者如果没有更改,请立即进行。

屏幕分辨率更改是异步完成的,函数调用在它发生之前就返回了,所以我的代码过早地运行,并将我的应用程序绘制到全屏应用程序的表面上,尺寸错误,然后在分辨率更改后,它看起来特别难看。

如果有人感兴趣,我的应用程序的来源是https://bitbucket.org/FrigoCoder/frigotab/src 。

为了澄清,我更感兴趣的是事先知道是否发生了分辨率变化,而不是稍后检测它。我已经知道了一个半解决方案,我SetForegroundWindow()在其中调用GetDesktopWindow()或其他一些窗口并观看SystemEvents.DisplaySettingsChangingDisplaySettingsChanged. 但是,如果发生分辨率更改,这只会给我一个延迟的异步通知,并且不会告诉我是否没有。

0 投票
2 回答
568 浏览

c# - 在后台启动应用程序

我创建了一个侦听键盘输入的 Windows 窗体应用程序。输入正确的输入命令后,它应该启动一个 google chrome 实例,然后运行我开发的 chrome 扩展。

我希望 chrome 进程在后台安静地运行,而其他前台进程尽可能运行。或者,如果这不可能,那么我希望能够切换回在成功输入命令之前在前台处于活动状态的进程。

这是可能吗?

0 投票
1 回答
632 浏览

winapi - 使用 Windows 计划任务设置前台窗口

我为 Windows 构建了一个全屏 GUI 应用程序(使用 LabVIEW,但语言应该无关紧要),它应该从 Windows 开始。我希望它是全屏的(隐藏 Windows 任务栏),所以我将窗口边界设置为屏幕的分辨率。

当我从资源管理器手动启动 exe 时,窗口会正确隐藏任务栏。但是当我在 Windows 登录时从计划任务启动它时,它位于任务栏后面,直到我单击该应用程序。当我在任务计划程序中运行计划任务手册时也是如此。

我尝试了 Win32 API 函数 SetForegroundWindow 但没有成功。也许条件不满足但我不明白为什么,没有其他可见窗口。

应用程序自动启动时如何强制全屏显示?

如果应用程序本身无法做到这一点,则应用程序代码的外部解决方案可能没问题(例如,一些脚本与计划任务一起运行),但我也没有看到。

0 投票
0 回答
1980 浏览

excel - VBA 设置前景窗口

我正在尝试编写定期放置/确保程序位于所有其他程序前面的代码。为了测试这一点,我使用了记事本。这段代码似乎只有在我在记事本前面打开一个新程序时才有效——而不是在我打开程序时;然后开始执行我的代码;然后把另一个已经打开的程序放在记事本前面。在这种情况下,记事本仅在任务栏中闪烁橙色。有人可以帮我吗?

0 投票
2 回答
1020 浏览

c# - c# - 如何在c#中将进程窗口集中在正在运行的webbrowser窗口上?

我在系统托盘中运行了一个小型 Windows 窗体程序(代理)。编写此代理的目的C#是启动其他程序,将它们聚焦并将它们置于前台。

该代理从浏览器接收启动其他程序的命令,并将成功启动报告给它。这意味着浏览器始终处于启动和运行状态。

从代理启动外部程序工作正常,但我很难让焦点和前景主题工作。似乎浏览器始终处于焦点位置,并且从代理启动的程序被移动到浏览器窗口的正后方。

我从User32.dll没有成功尝试过以下方法:

  • SetForegroundWindow(IntPtr handle)
  • SwitchToThisWindow(IntPtr hWnd, bool fAltTab)

奇怪的是,如果我在我的 Visual Studio 中运行代理,焦点就完美了!

非常感谢您的帮助,因为我是 Windows 内部的新手。

更新 1:我注意到,例如,如果一个 powershell 窗口(可以是任意的)覆盖在浏览器窗口上,则聚焦已启动的进程窗口按预期工作。

更新 2:我能够通过调用获得正确的焦点

在浏览器进程窗口和

在已启动的进程窗口上。但我认为这是一种不好的方法,因为浏览器窗口可能会消失在其他打开的窗口后面。我也试过

切换浏览器窗口和进程窗口的Z顺序,但没有成功。

问题:如何切换浏览器进程和启动进程的Z顺序?

0 投票
0 回答
186 浏览

c# - SetForegroundWindow() 在现有控制台窗口中不起作用

以下代码仅在我运行控制台窗口的新实例时才有效。例如,当我从 VS 运行代码或双击 exe 文件时,它可以工作。但是,当我从已打开的 CMD 运行 exe 时,它​​不起作用。

有没有办法让它工作,还是不可能?

0 投票
0 回答
183 浏览

c# - InputSimulator 在重新激活 WPF 窗口后将密钥发送到错误的进程

问题:

我有一个活动的 WPF 窗口。在创建时,进程被设置为窗口的所有者。现在,当在 WPF 窗口上触发 Key-Down 事件时,应将 Key 传递给主进程。

首先,我使用 SetForegroundWindow() 将焦点设置为主进程。密钥是使用 InputSimulator 发送的。

到目前为止,这按预期工作。但是,在发送 Key 之后,Wpf 窗口应该重新获得焦点,以便它可以捕获下一次按键。

我正在尝试在 WPF 窗口上调用 Activate()。现在出现的问题是 InputSimulator 发送的 Key 不再传递给主进程,而是被 WPF Window 捕获。

代码

继承人的代码:

这是Window的创建

WindowWrapper 的实现:

还有我的 Window.KeyDown 处理程序:

0 投票
0 回答
83 浏览

c# - 专注于控制台应用程序

我正在创建一个程序,通过控制台应用程序控制 excel,但我需要不断关注控制台。我已经尝试了一些方法,例如 SetForegroundWindow() ,但没有奏效。我怎样才能做到这一点?我需要它在while循环内,这样每次我插入一个字符(代码完成,所以我不必每次都按Enter键)它留在控制台应用程序中并且不会改变焦点做excel。

0 投票
1 回答
1088 浏览

python - 当 RDP 窗口到服务器最小化或锁定时,SetForegroundWindow() 未运行

我正在从事一个自动化项目,该项目需要我搜索 acrobat 进程,然后将其置于前台。我正在使用 Windows Server 2012 R2 Standard 和 Python。我在进程列表中搜索该特定 PDF 文件,然后尝试将该窗口置于前台。

当服务器打开并处于活动状态时,我的代码运行良好。一旦它被最小化或锁定,它就不起作用。具体来说,SetForegroundWindow() 行不起作用并抛出错误“(0, 'SetForegroundWindow', 'No error message is available')”。

接下来,我浏览了此处列出的许多示例,有人建议在该行之前使用“Alt”选项卡。试过了,没用。然后我根据另一个用户使用了 ShowWindow() 但同样的错误又来了。现在,我完全被困住了。

我已经查看了许多与该问题相关的线程,例如: 1. SetForegroundWindow 不适用于最小化进程 2.最小化时转到前向窗口 3.最小化时转到前向窗口

我试过 MainWindowHandle 可以修复错误,但我无法在 python 中实现它。

另外,我安装了 pywinauto 并使用了 pywinauto 的 findwindows 和 SetForegroundWindow 功能。当服务器处于活动状态时它运行良好,但一旦我们最小化或锁定服务器,它就不起作用并给出相同的错误“(0,'SetForegroundWindow','没有可用的错误消息')”。

现在,我完全没有选择。有什么想法/建议吗?

这是片段:

0 投票
1 回答
3576 浏览

windows - 从后台进程将窗口带到前台

我的情况:浏览器显示由本地运行的网络服务器提供的网页。当用户单击页面上的按钮时,我想跳转到另一个可能已经在运行的应用程序。在 Windows 上工作时,我考虑在本地运行的网络服务器中处理按钮单击,然后查找相应HWND的调用SetForegroundWindow它。

但是,就目前而言,本地运行的网络服务器没有足够的权限来SetForegroundWindow. 这些限制是有道理的,但我认为单击是一个足以证明跳转到另一个应用程序的独特事件。

我阅读了一些技术来规避这个限制并强制一个窗口进入前台:

  • AttachThreadInput:似乎是个坏主意
  • 发送热键:似乎被Chromium 项目使用,但涉及创建自己的消息循环。它的作者说它可能是一个 Windows 错误(即使旧的新事物在没有明确警告的情况下提到它)。此外,如果另一个已经调用的应用程序注册了这个热键,它就不能可靠地工作。
  • 启动一个独立的包装器(从而希望给它足够的权限SetForegroundWindow),它的唯一任务是切换到另一个应用程序:看起来很重量级,但可能比其他解决方案更容易。

以上没有一个看起来对我特别有吸引力。我有更好的选择吗?