You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Tkinter窗口不受Win+D快捷键的最小化影响?

解决Tkinter窗口在Win+D后保持置顶的问题

Tkinter自带的wm_attributes('-topmost', 1)只能保证窗口在其他普通窗口之上,但挡不住Windows的Win+D显示桌面快捷键——这是系统级操作,会最小化所有标准窗口。要绕过这个限制,得借助Windows API来修改窗口的系统属性,让它不被Win+D影响。

下面是具体的实现代码:

import tkinter as tk
import ctypes
from ctypes import wintypes

# 加载Windows用户32位动态链接库
user32 = ctypes.WinDLL('user32', use_last_error=True)

# 定义所需的常量
HWND_TOPMOST = -1
SWP_NOMOVE = 0x0002
SWP_NOSIZE = 0x0001
SWP_NOACTIVATE = 0x0010
GWL_EXSTYLE = -20
WS_EX_TOPMOST = 0x00000008
WS_EX_TOOLWINDOW = 0x00000080

# 声明API函数的参数和返回值类型
user32.SetWindowPos.restype = wintypes.BOOL
user32.SetWindowPos.argtypes = (
    wintypes.HWND, wintypes.HWND,
    wintypes.INT, wintypes.INT,
    wintypes.INT, wintypes.INT,
    wintypes.UINT
)

user32.GetWindowLongPtrW.restype = wintypes.LONG_PTR
user32.GetWindowLongPtrW.argtypes = (wintypes.HWND, wintypes.INT)

user32.SetWindowLongPtrW.restype = wintypes.LONG_PTR
user32.SetWindowLongPtrW.argtypes = (wintypes.HWND, wintypes.INT, wintypes.LONG_PTR)

# 创建Tkinter窗口
root = tk.Tk()
root.title("Win+D免疫置顶窗口")
root.geometry("300x200")

# 获取窗口句柄
hwnd = wintypes.HWND(root.winfo_id())

# 修改窗口扩展样式:添加工具窗口属性(避免被Win+D最小化)+ 置顶
current_style = user32.GetWindowLongPtrW(hwnd, GWL_EXSTYLE)
new_style = current_style | WS_EX_TOPMOST | WS_EX_TOOLWINDOW
user32.SetWindowLongPtrW(hwnd, GWL_EXSTYLE, new_style)

# 强制设置窗口为置顶状态
user32.SetWindowPos(
    hwnd, HWND_TOPMOST,
    0, 0, 0, 0,
    SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE
)

# 拦截窗口最小化事件,确保不会被隐藏
def block_minimize(event):
    root.deiconify()
    return "break"

root.bind("<Unmap>", block_minimize)

root.mainloop()

关键原理说明:

  • WS_EX_TOOLWINDOW:这个Windows窗口样式会把你的应用标记为工具窗口,系统的显示桌面操作(Win+D)不会对这类窗口执行最小化。
  • 结合WS_EX_TOPMOST和SetWindowPos:双重保障窗口始终处于顶层位置,避免被其他窗口覆盖。
  • <Unmap>事件绑定:拦截窗口被隐藏的操作,一旦触发就立即恢复窗口显示,防止意外最小化。

注意:这个方案仅适用于Windows系统,因为用到了专属的Windows API。

内容的提问来源于stack exchange,提问作者박제현

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:37:09