如何确保应用窗口始终处于最上层?
我有一个简单的Python脚本,它是在控制台窗口中运行的。
我该怎么做才能确保这个控制台窗口总是显示在最上面,并且如果可以的话,调整它的大小呢?
3 个回答
2
如果你想自己创建一个窗口,可以使用Tkinter来做一个“总在最上面”的窗口,方法如下:
from Tkinter import *
root = Tk()
root.wm_attributes("-topmost", 1)
root.mainloop()
然后在主循环中放入你想要的操作。
如果你说的是命令提示符窗口,那么你需要使用一些特定于Windows的工具来让那个窗口保持在最上面。你可以试试这个Autohotkey的脚本。
6
根据Mark的回答,我得到了这个结果:
import win32gui
import win32con
hwnd = win32gui.GetForegroundWindow()
win32gui.SetWindowPos(hwnd,win32con.HWND_TOPMOST,100,100,200,200,0)
2
要在命令提示符窗口中做到这一点,你可能需要调用很多win32的功能。
- 使用win32gui.EnumWindows来列出所有窗口,这样你就能获取到窗口的句柄。
- 找到与你运行程序时匹配的“窗口标题”。比如,在我的系统上,双击一个.py文件时,窗口标题是“C:\Python26\python.exe”。而在命令行运行时,标题是c:\Windows\system32\cmd.exe - c:\python26\python.exe test.py。
- 用合适的标题获取命令提示符窗口的句柄。
- 使用win32gui.SetWindowPos将你的窗口设置为“最上层”窗口等等……
import win32gui, win32process, win32con
import os
windowList = []
win32gui.EnumWindows(lambda hwnd, windowList: windowList.append((win32gui.GetWindowText(hwnd),hwnd)), windowList)
cmdWindow = [i for i in windowList if "c:\python26\python.exe" in i[0].lower()]
win32gui.SetWindowPos(cmdWindow[0][1],win32con.HWND_TOPMOST,0,0,100,100,0) #100,100 is the size of the window