首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >赢10: Cmd可以使窗口到前台,但任何其他终端不能(即使是高架)。为何会这样呢?

问赢10: Cmd可以使窗口到前台,但任何其他终端不能(即使是高架)。为何会这样呢?
EN

Stack Overflow用户
提问于 2020-11-03 18:59:51
回答 1查看 1.6K关注 0票数 3

我用pygetwindow把一个窗口带到前台,通过它的标题。如果我从cmd(和PowerShell)运行我的python脚本,它将完美地工作。但是,如果我从任何其他终端运行它,比如说Alacritty,而不是出现在前台,上面提到的窗口只是开始在任务栏中闪烁。

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

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

代码语言:javascript
复制
import pygetwindow
try:
        window = pygetwindow.getWindowsWithTitle('foobar')[0]
        window.activate()
    except Exception as e:
        #raise e
        print("open foobar please")
        exit(1)

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

代码语言:javascript
复制
# Shell
# You can set `shell.program` to the path of your favorite shell, e.g. `/bin/fish`.
# Entries in `shell.args` are passed unmodified as arguments to the shell.
# Default:
#   - (macOS) /bin/bash --login
#   - (Linux/BSD) user login shell
#   - (Windows) powershell
  shell:
    program: cmd.exe
    args:
            - /s /k pushd C:\Users\interesting\bug\hunt\Repos

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-03 19:06:54

您的程序必须符合以下之一才允许设置活动窗口(使用API调用SetForegroundWindow)。

您可能会发现使用SendKeys发送系统击键(如Ctrl+Tab )将对您有效,但您需要能够预测您的z顺序。

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

·这一过程就是前景过程。

进程是由前台进程启动的。

进程收到了最后一个输入事件。

没有前台处理。

该过程正在调试中。

·前台进程不是现代应用程序,也不是启动屏幕。

·前台没有锁定(参见LockSetForegroundWindow)。

·前台锁定超时已过期(参见SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo)。

·菜单没有活动。

https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setforegroundwindow

这些限制的目的是解决程序盗取焦点的问题。因此,基本上,如果用户单击另一个窗口,则用户的选择将获胜。

启动程序时,程序有两秒钟时间显示窗口。如果用户在程序显示其“窗口”之前单击另一个窗口,则该程序仍将成为活动窗口。如果程序花费的时间超过2秒,并且用户单击离开,则用户的窗口将是活动窗口。

还请参阅https://devblogs.microsoft.com/oldnewthing/20090220-00/?p=19083进行讨论。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64668938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档