鱼C论坛

 找回密码
 立即注册
查看: 3251|回复: 9

[已解决]各位大佬,python怎样实现切换窗口界面焦点,类似Alt+Tab 那样,但不显示切换图标?

[复制链接]
发表于 2022-9-24 23:06:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 qq1151985918 于 2022-9-24 23:09 编辑

各位大佬,python怎样实现切换窗口界面焦点,类似Alt+Tab 那样,但不显示切换图标?

如图,不想显示 按下 Alt + Tab 界面的这个
比如说我现在有两个窗口
打开了一个TXT文本
运行了一个 Tk  界面
现在焦点在 TK 也就是 TK 在 TXT 上面
然后点击一个按钮  焦点就能返回到下面的窗口(就是 TXT 文本窗口变在上边,就类似按下了 Alt + Tab)
pyautogui是不是可以做到?或者其他的什么求大佬解惑


Z01.png
最佳答案
2022-9-25 08:00:08
qq1151985918 发表于 2022-9-24 23:52
就实现一次就够了,按理说能实现一次就能来回实现

测试环境:py3.7+tkinter+pywin32+win10+win10自带的计算器+spy++
import tkinter
from tkinter import Tk
from win32com.client import Dispatch
import win32gui,win32com

root=Tk()
root.geometry("400x100+200+180")
root.resizable(False,False)
root.title("测试推其他进程到顶层窗口")

def ok():
    shell = win32com.client.Dispatch("WScript.Shell")
    shell.SendKeys('%')
    #窗口类名:"ApplicationFrameWindow"
    #窗口标题:"计算器"
    #这两项需要使用类似spy++一类的工具 手工查找
    win32gui.SetForegroundWindow(win32gui.FindWindow("ApplicationFrameWindow","计算器"))
    #hwnd=win32gui.GetForegroundWindow()
    #xypos=win32gui.GetWindowPlacement(hwnd)[4]

btnupdate=tkinter.Button(root,text="点击试试吧",command=ok)
btnupdate.place(x=150,y=30,width=80,height=40)

root.mainloop()

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-24 23:40:38 From FishC Mobile | 显示全部楼层
是要把其他进程的窗体变成顶层窗口吗
可是也只能实现一次啊,因为其他进程的窗口升为顶层窗口后,你自己就降了,然后就不再接收鼠标或键盘了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-24 23:41:28 | 显示全部楼层
import pyautogui
import time

pyautogui.keyDown('alt')    # 按下shift
time.sleep(2)
pyautogui.press('tab')    # 按下 tab
time.sleep(1)
pyautogui.press('tab')    # 按下 tab
time.sleep(2)
pyautogui.keyUp('alt')   # 释放 shift
print('ok')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-24 23:43:29 From FishC Mobile | 显示全部楼层
xiangjianshinan 发表于 2022-9-24 23:41

这个不用sleep那么久吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-24 23:45:04 | 显示全部楼层
wp231957 发表于 2022-9-24 23:43
这个不用sleep那么久吧

这是为了能让眼睛看到操作效果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-24 23:52:22 From FishC Mobile | 显示全部楼层
wp231957 发表于 2022-9-24 23:40
是要把其他进程的窗体变成顶层窗口吗
可是也只能实现一次啊,因为其他进程的窗口升为顶层窗口后,你自己就 ...

就实现一次就够了,按理说能实现一次就能来回实现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-24 23:55:36 | 显示全部楼层

你这个不是模拟按键么?这还是会显示切换界面啊,我是想不显示,就是直接就切换了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-25 05:39:24 From FishC Mobile | 显示全部楼层
qq1151985918 发表于 2022-9-24 23:52
就实现一次就够了,按理说能实现一次就能来回实现

你想把哪个窗口推到最顶层  是记事本一类的编辑器,还是浏览器,还是其他三方进程
把其他进程推到顶层容易,要是再返回原窗口,是回不去的,但是可以注册全局热键应该能回去
不过我搜了一下,注册全局热键代码太过复杂,你可以自己搜一下,推顶层窗口,我有功夫可以把代码给你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-25 08:00:08 | 显示全部楼层    本楼为最佳答案   
qq1151985918 发表于 2022-9-24 23:52
就实现一次就够了,按理说能实现一次就能来回实现

测试环境:py3.7+tkinter+pywin32+win10+win10自带的计算器+spy++
import tkinter
from tkinter import Tk
from win32com.client import Dispatch
import win32gui,win32com

root=Tk()
root.geometry("400x100+200+180")
root.resizable(False,False)
root.title("测试推其他进程到顶层窗口")

def ok():
    shell = win32com.client.Dispatch("WScript.Shell")
    shell.SendKeys('%')
    #窗口类名:"ApplicationFrameWindow"
    #窗口标题:"计算器"
    #这两项需要使用类似spy++一类的工具 手工查找
    win32gui.SetForegroundWindow(win32gui.FindWindow("ApplicationFrameWindow","计算器"))
    #hwnd=win32gui.GetForegroundWindow()
    #xypos=win32gui.GetWindowPlacement(hwnd)[4]

btnupdate=tkinter.Button(root,text="点击试试吧",command=ok)
btnupdate.place(x=150,y=30,width=80,height=40)

root.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-25 13:49:45 | 显示全部楼层
wp231957 发表于 2022-9-25 08:00
测试环境:py3.7+tkinter+pywin32+win10+win10自带的计算器+spy++

查了下 win32gui.FindWindow 用法  给我指引了方向,感谢感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 05:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表