问题标签 [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 回答
1201 浏览

c++ - 如果已经运行,则 C++ 程序将进程置于前台,否则创建一个新进程

我正在尝试学习 Windows 编程。我想program.exe从 c++ 代码启动一个可执行文件(比如说)。我可以通过CreateProcess()在 Windows 中使用方法来实现这一点。但是,我的问题是,如果进程已经创建并在后台运行,那么窗口program.exe应该进入前台,否则应该创建一个新进程并将其带到前台。任何帮助将不胜感激。

0 投票
1 回答
100 浏览

c# - 创建一个写字板实例并将其置于顶部 z 顺序,全部来自非前台应用程序

我正在使用语音操作软件(来自 Nuance 的 Dragon,或者可能是 Windows Speech Recognition(尚未尝试过))。

在操作中,用户(我)发出语音命令以使某事发生。对于这个问题,我正在尝试编写代码来启动一个简单的应用程序,例如记事本或写字板,以便它可以接收听写。另一种形式的语音命令切换应用程序以将后台应用程序(邮件、浏览器、电子表格等)带到前台,以便它可以接收语音输入。所以这不是一个“窃取焦点”的恶意软件场景;它是用户驱动的,但来自麦克风而不是键盘或鼠标。

我有一个 C# 应用程序(我们称之为 Creator),它创建了一个运行 WordPad 的新进程。我希望新创建的写字板实例在屏幕上显示为顶部窗口,就好像它是从“开始”菜单中创建的一样。

只要在创建写字板进程时 Creator 应用程序是前台应用程序,一切都会正常工作。在这种情况下,WordPad 实例按预期按 Z 顺序显示在 Creator 进程上方。

但是,如果 Creator 窗口在创建 WordPad 进程和实例时不是前台窗口,则新创建的 WordPad 实例不会出现在 Z 顺序的顶部。它出现在创建者窗口的顶部,但在创建写字板进程时,在 Z 顺序中创建者进程上方的任何其他窗口下方。

我已经阅读了很多帖子,并尝试了 , , , 和 的许多序列和变体SetForegroundWindowSetWindowPosShowWindow没有WindowRestore成功Focus。新创建的写字板实例始终创建在 Creator 窗口上方但在 Creator 窗口顶部的所有窗口下方。

我究竟做错了什么?

我理解焦点窃取的问题,下面的一位评论者提供了一个有用的链接,指向陈的一篇旧帖子。然而,Dragon 语音软件以某种方式完成了我想做的事情。“DragonBar”应用程序始终位于所有其他窗口的顶部,但允许我移动焦点并使用鼠标切换应用程序。(推断在顶部独立于作为前台应用程序是否正确?)

目前,我可以在我的应用程序中接收用户的语音请求。我的问题是如何实现用户的请求以启动新进程(和写字板)并将它们从我的小 Creator 应用程序带到前台?只要在我收到用户请求时我的 Creator 应用程序是前台/顶级应用程序,一切都很好。但是,如果我在 Creator 不是前台应用程序时收到语音请求,我将无法执行用户请求的操作。谢谢你。

0 投票
3 回答
73 浏览

powershell - Powershell新人

我是powershell的新手,所以如果我的问题听起来很愚蠢,请原谅我。我从 Yuri Posidelov 那里找到了下面的脚本,我对其进行了调整以激活进程并显示窗口并发送击键以关闭运行良好的进程。但是,如果有两个同名的进程,它会失败任何人都可以帮助我解决这个问题。

Yuriy Posidelov 的原始密码

0 投票
1 回答
332 浏览

c# - SetForegroundWindow 没有设置焦点

嗨,所以我试图获得应用程序的焦点,我在网上能找到的只是SetForegroundWindow方法,所以我尝试实现它,但它根本没有将焦点设置到应用程序,我还发现一些关于它不可靠的文章,所以想要询问我是否做错了,或者是否有更好的方法将按键注入应用程序,谢谢!

该过程是正确的,我仔细检查了

0 投票
1 回答
886 浏览

python-3.x - Win 10:Cmd 可以将窗口带到前台,但任何其他终端都不能(即使提升)。为什么会这样?

pygetwindow用来通过它的标题将一个窗口带到前台。如果我从 cmd(和 PowerShell)运行我的 python 脚本,它可以完美运行。但是,如果我从任何其他终端运行它,比如 Alacritty,而不是进入前台,所提到的窗口就会开始在任务栏中闪烁。

为什么会这样?我已将 Alacritty 配置为使用 cmd。

以下是我的代码的相关部分:

以下是我的 alacritty 配置的相关部分

谢谢你

0 投票
1 回答
708 浏览

delphi - 无法将窗口设置为前景(Delphi)

这是我用来恢复并将窗口设置为前台的代码。当窗口最小化时,代码工作完美,但是当窗口隐藏在其他窗口后面时,我无法将窗口带到前台,后来我发现它SetForegroundWindow(Handle)一直返回 false。但是,如果我在调试模式下运行程序,则可以将窗口置于前台。我似乎无法弄清楚是什么导致了这种情况发生。

其中 PID 是我要恢复并设置为前台的窗口的进程 ID。

更新:我刚刚在文档中读到了这个。会不会有关系?

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

0 投票
0 回答
48 浏览

c# - 尝试使用 SetWindowsHookEx 和 SetForegroundWindow 使用热键管理窗口

我正在尝试创建一个工具来管理一些窗口,例如当我按下一个键时,我会将焦点更改为下一个窗口,依此类推,这是我编写的将焦点设置到列表中的下一个窗口的方法

这是我在我的键盘记录类中使用热键执行上述方法的方法

问题是当我调试一切正常时,当我按下我的愿望键时,它会将下一个窗口设置在前台,现在问题来了,当我使用发布版本时,它会变得混乱,就像当我按下我的愿望键时,它会切换到下一个窗口一次并卡在那里,永远不会切换到新窗口,它与我的调试测试完全不同,所以我不知道如何调试在调试时可以工作但在 Visual Studio 之外无法工作的东西.

0 投票
3 回答
453 浏览

c# - 将窗口置于前台拒绝在 Windows 10 中工作

我有一个 powershell 脚本,它打开一个名为 CNCScreenE 的程序,保存此窗口的屏幕截图,然后关闭应用程序。

在我运行它的前几次它运行良好。

在那几次之后,现在每次调用程序时,它都不是在前台打开,而是在其他已经打开的东西后面打开(在这种情况下是 Visual Studio 代码)。屏幕截图仍然被保存,但图像包含前景中的任何内容,在这种情况下是 Visual Studio 代码。

我尝试了各种脚本来将窗口置于前台,这些脚本基本上都是同一事物的细微变化,但没有取得多大成功。它们通常只会导致窗口在任务栏中闪烁。

我发现了一些建议,即在不首先满足某些条件的情况下将窗口置于前台并不总是可能的,例如最后一次输入必须来自前台的程序,或者您可以先最小化窗口,然后再将其带到前台前景。

我的问题是我在通过 powershell 使用 windows api 方面不是很有经验。我知道 add-type 正在编译 c# 代码,然后允许 powershell 访问 api,但我对 c# 几乎一无所知,这是我第一次使用 add-type。

我也试过这个看起来写得很好的脚本,但每次我尝试运行它时都会出现一系列错误。

它产生的错误基本上与下面相同,但涉及各种字符:

我认为这与看起来很奇怪的引号有关,但是当我用常规引号替换它们时,它会给出这些对我来说没有多大意义的错误

0 投票
0 回答
21 浏览

c# - 选择应用程序窗口和 PostMessage

我创建了在 Windows VM 上运行的应用程序(KeySimulator)。此应用程序正在向另一个应用程序 (DraftSight) 发送一个“ENTER”键。DraftSight 在同一个 VM 上运行。我的应用程序的缅因州目的是选择 DraftSight 并单击“ENTER”,以防万一在 DraftSight 上弹出任何消息。一切正常,除了我的应用程序有时无法识别 DS 应用程序。我的应用程序 24/7 全天候运行,我有一个任务可以在登录时启动我的应用程序,或者如果我的应用程序没有运行。这是我的该功能的代码:

[DllImport("USER32.DLL", CharSet = CharSet.Unicode)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("USER32.DLL")] public static extern bool SetForegroundWindow(IntPtr hWnd);

IntPtr draftSightHandle = FindWindow("Qt5QWindowIcon", null);

SetForegroundWindow(draftSightHandle);

常量 UInt32 WM_KEYDOWN = 0x0100; PostMessage(draftSightHandle, WM_KEYDOWN, (int)Keys.Enter, 0);

0 投票
0 回答
30 浏览

c# - C# 如何停靠应用程序?

我用 C# 编写了一个应用程序,它将另一个应用程序带到了前台。

这个功能到此为止。但是,有一个问题。

如果您设置焦点,应用程序将打开并置于前台,但 Windows 停靠功能不起作用。该应用程序仅以其最后一个窗口大小打开。

编辑:我忘了提到应该在 Windows 桌面(显示器边缘)上看到对接。

有谁知道如何打开对接功能?