我用pygetwindow把一个窗口带到前台,通过它的标题。如果我从cmd(和PowerShell)运行我的python脚本,它将完美地工作。但是,如果我从任何其他终端运行它,比如说Alacritty,而不是出现在前台,上面提到的窗口只是开始在任务栏中闪烁。
为什么会这样呢?我已经将Alacritty配置为使用cmd。
以下是我的代码的相关部分:
import pygetwindow
try:
window = pygetwindow.getWindowsWithTitle('foobar')[0]
window.activate()
except Exception as e:
#raise e
print("open foobar please")
exit(1)下面是我的alacritty配置的相关部分
# 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谢谢
发布于 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进行讨论。
https://stackoverflow.com/questions/64668938
复制相似问题