问题标签 [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 投票
1 回答
782 浏览

.net - SetForegroundWindow 被忽略

我正在编写一个小实用程序来允许我将输入多路复用到多个终端窗口;

在此处输入图像描述

表单(在中心)接收到的任何输入都会转发到它管理的所有终端窗口。

这很好用,但是如果我在终端前面移动另一个窗口,就会出现问题。输入表单Topmost总是可见的,但终端会话是隐藏的。

要解决此问题,双击输入窗口会遍历所有终端并 依次调用SetForegroundWindow(from )。user32.dll

如果我在没有 的情况下进行此调用Thread.Sleep(15),则仅将列表中的第一个和最后一个窗口置于前台。解决了这个Sleep问题,但有点破解(当有很多终端打开时有点难看)。

我假设我正在达到一些内部窗口滴答频率,每个滴答声最多可以将一个窗口带到前面。

我的假设是否正确?有没有办法绕过这个限制?诸如排队消息之类的东西MoveAllToForeground()

编辑:

澄清一下:我正在自动化的终端进程不是我的应用程序的一部分,它是PuTTY

如果我将调用换成SetForegroundWindowfor BringWindowToTop,我会遇到类似的问题 - 尽管在这种情况下,只有第一个终端被带到前面,其余的留在任何其他窗口后面。

编辑2:

以下是大卫的建议。声明:

还有电话...

0 投票
1 回答
3963 浏览

c# - SetForegroundWindow 不起作用

我正在尝试启动一个应用程序并将其放在前面。但是,应用程序启动正常,然后最终落后于启动应用程序。请注意,在已经运行的最小化应用程序上使用类似的方法可以正常工作(为简洁起见,从该示例中删除了该代码) - 它仅在启动应用程序的新实例时无法工作。有任何想法吗?谢谢

0 投票
0 回答
124 浏览

winapi - 什么可以阻止窗口显示在前台?

在某些情况下,什么会阻止对话框以模态方式显示在前台?

一个进程 (KeePass.exe) 拥有一个隐藏窗口。全局快捷键 (CTRL+A) 在前台显示一个对话框。这是使用 DoModal 方法完成的。它有效。

但是,在某些我不知道的情况下,会发生以下情况:窗口出现在任务栏中,并且只有在单击它之后才会显示。我为 KeePass 创建了一个插件,它覆盖了 WndProc 并等待某个 WM_COPYDATA 消息。如果此消息到达,则使用 DoModal 显示对话框。但是,在这种情况下,它只显示在任务栏中,而不显示在前台。

WM_COPYDATA 消息是从不同的进程发送的,但这应该没关系吧?这可能是什么原因?

我为此苦苦挣扎了很长时间,这太奇怪了,甚至很难解释这个问题。

我尝试在显示对话框之前发出 SetForegroundWindow(hKeePassWindow) 但没有变化。

0 投票
1 回答
3200 浏览

winapi - 允许后台应用程序设置不同进程的前台窗口

首先,我知道这是一个有争议的讨论,但我希望我们能保持这种技术性。

我有一个在后台启动的应用程序,我希望它能够激活/使窗口聚焦在不同的进程中。但是,即使我要激活其窗口的进程调用了 AllowSetForegroundWindow(ASFW_ANY),调用 SetForegroundWindow 总是会失败。

原因是(IMO)启动应用程序是后台进程,并且由于它没有收到输入,因此不允许设置前台窗口。所以一切都出现在任务列表中,但没有显示出来。

所以我尝试创建一个虚拟窗口来接收立即关闭的输入,然后能够成功调用 SetForegroundWindow。但即使是我显示的虚拟窗口也显示在背景中。

但是,如果我打电话

在创建虚拟窗口之前,该窗口确实是在前台创建的,然后我可以不同的进程中为不同的 HWND 调用 SetForegroundWindow 。

但是:如果我不创建虚拟窗口,尽管我使用 AttachThreadInput,但 SetForegroundWindow 仍然返回零。

我不明白为什么如果我创建一个自己的窗口(然后为其他窗口成功),为什么 AttachThreadInput hack 会成功,但如果我不先创建自己的窗口则不成功。

我的后台进程如何在不同进程中的不同窗口上调用 SetForegroundWindow而不创建虚拟窗口?

[*] 后台应用程序实际上是 gpg-agent.exe,它在请求密码时调用 pinentry.exe(我的应用程序)。pinentry.exe(作为后台进程运行)必须从另一个正在运行的应用程序请求密码,因此它必须将其窗口置于前台...

0 投票
1 回答
188 浏览

c# - 让程序读取一个ini文件来选择和激活不同的窗口

我想编写一个以 6 秒间隔在不同窗口之间切换的小应用程序。这将是资源管理器 url,但它们会不时(每天)更改,因此我想创建一个 ini 文件,我可以每天更新 url,然后根据 ini 文件描述在活动窗口之间切换应用程序。网址将类似于

http://servername.test.lab:8081/OVPM?ACTION=LOADSTATE&STATENAME=domain_Servers_Disk_Utilization&CUSTOMER=

我有用于磁盘利用率、内存 cpu 等的 OMW url,并希望在它们之间切换。所以我的问题是

  1. 如何基于 url 使用 SetForegroundWindow() (窗口标题是否适用于网页)?
  2. 我怎样才能让 C# 使用 ini 来读取要使用的 urlSetForegroundWindow()
  3. 我应该使用不同的方法吗
0 投票
1 回答
868 浏览

c# - C# SetforegroundWindow 到 VB.Net 然后 SendKeys

我正在自动化一些流程。我运行一个 VB.net 应用程序,需要输入密码,Tab 到“登录”按钮,发送回车,Tab 到“运行加载”按钮,然后按 Enter。SendKey 部分似乎不是问题;它让正确的应用程序成为焦点。我希望 form.TopMost 可以提供帮助,但不幸的是并非如此。

我尝试了几种不同的方法将 VB.net 应用程序/进程放在前面,奇怪的是它有时可以工作,但有时还不够好。有没有人有任何想法?我也查看了前 6 个左右的谷歌搜索结果。谢谢。

编辑:为了澄清,这段代码启动了一个 VB.net 应用程序,我正在尝试自动击键以输入凭据并通过按 Enter 启动应用程序。但是,为了使击键实际注册,VB.net 应用程序需要是活动窗口。还将我的代码更改为有效的代码(它工作了 1/7 次尝试)。

0 投票
1 回答
931 浏览

winapi - 在 Windows 8+ 中,当 Metro App 通过 API 在前台时,如何将 Window Desktop App 置于前台?

我的桌面应用程序挂钩了一些热键,例如:CTRL+SHIFT+F12,当按下热键时,它会将我的桌面应用程序窗口置于前台或保持在顶部。但在 Window 8 或 8.1 中,当它处于 Window Start Screen 或 Metro App 在前台运行时,我的程序无法切换回桌面模式并将我的窗口置于前台。我尝试了以下 API,SetFocus(hwnd); ShowWindow(hwnd, SW_SHOW); SetActiveWindow(hwnd); SetForegroundWindow(hwnd); SwitchToThisWindow(hwnd);

我什至在“explorer.exe shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257}”上尝试了 ShellExecute,但它不起作用。

我不确定 Classic Shell 最新版本(http://www.classicshell.net)如何做到这一点,当我按下 SHIFT+WIN 键时,它能够从 Metro Mode 切换回桌面模式并显示 Classic Shell窗户。

谢谢。

0 投票
2 回答
140 浏览

winapi - 如何修复顶部的窗口

我用来SetForegroundWindow在顶部设置其他应用程序的窗口。我怎样才能在顶部修复这个窗口?这意味着,一旦其他一些应用程序调用SetForegroundWindow,我的窗口将低于我的固定窗口。

0 投票
1 回答
2801 浏览

python - 如何正确使用 ShowWINdow() 和 SetForegroundWindow?

这是我想做的事情:

1)使用用户名打开一个应用程序
2)提供一些输入
3)为具有不同用户名的应用程序打开第二个窗口
4)再次提供一些输入
5)切换到第一个应用程序窗口,做某事
6)切换到第二个应用程序

我正在使用该win32gui库在 python 中编程。我试过使用ShowWindowand SetForegroundWindow,但它不能正常工作,有人可以解释一下用一种非常简单的方式来做这件事的方法吗?

0 投票
0 回答
588 浏览

windows - 在delphi中获取闪烁的窗口(需要焦点的窗口并且窗口不会将其设置为前面)

我在互联网上搜索如何启用 Windows 7 中任务栏上有闪烁按钮的“自动切换”或“自动升起”窗口,我能找到的只是如何禁用它!我只需要反对,就可以启用它,所以我查看了答案并找到了注册表项 ForegroundLockTimeout。我认为默认设置为 200000 毫秒,所以我将其设置为 1 毫秒,但我猜在 Windows XP 之后这不会影响任何东西。我发现它曾经可以在 Microsoft 的 Tweak UI 中启用自动切换,但是这似乎也不适用于Win 7。

我尝试在 Delphi 中对其进行编程,我可以使用 SetForegroundWindow 在顶部设置窗口,但我无法检测到哪些窗口需要注意 - 正在闪烁。甚至可以使用 GetForegroundWindow 检测前景窗口,但不能检测正在闪烁的窗口,因此我可以将其设置在顶部。

所以我的问题是,在德尔福中是否有可能获得需要在后台聚焦的窗口的 hwnd ?