我想使用python隐藏所有正在运行的窗口

问题描述 投票:0回答:1

我只为 Windows 创建这个程序。我想要像win+d这样的效果。我想要一个应用程序,当我打开它时,它将隐藏(最小化)所有窗口并显示桌面。我使用了 pygetwindow 库,但无法过滤核心窗口。我打开了 3 个窗口,但是当我使用该函数获取窗口时,它返回大约 15。所以我不能只做一个循环并最小化所有窗口。

import time
import pygetwindow as gw

def hide():
    windows = gw.getAllWindows()
    for window in windows:
        if not window.is_system:
            window.minimize()
    time.sleep(3)
    return True

print(hide())
print(gw.getAllTitles())

这是我的代码。 getAllTitles 函数会像 Windows 程序管理器、Cortana 一样返回,甚至返回空名称。另外,我不想使用 pyautogui 来单击“win+d”。谢谢您的帮助:)

python windows pyautogui minimize
1个回答
0
投票

您可以使用

ctypes
检索窗口标题和
hwnd
(它们不是系统的一部分),并将它们与 Win32Window 中的
pygetwindow
类一起使用。
import ctypes
from ctypes import wintypes
import pygetwindow as pgw

# Define necessary WinAPI structures and constants
user32 = ctypes.windll.user32
kernel32 = ctypes.windll.kernel32

EnumWindowsProc = ctypes.WINFUNCTYPE(ctypes.c_bool, wintypes.HWND, wintypes.LPARAM)
GetWindowTextLength = user32.GetWindowTextLengthW
GetWindowText = user32.GetWindowTextW
IsWindowVisible = user32.IsWindowVisible
EnumWindows = user32.EnumWindows

# Buffer length for window title
nChars = 256

# List to store the results
windows = []

# Function to enumerate windows
def enum_windows_proc(hwnd, lParam):
    if IsWindowVisible(hwnd):
        length = GetWindowTextLength(hwnd)
        if length > 0:
            buff = ctypes.create_unicode_buffer(nChars)
            GetWindowText(hwnd, buff, nChars)
            windows.append((hwnd, buff.value))
    return True

def get_windows_list():
    EnumWindows(EnumWindowsProc(enum_windows_proc), 0)
    return windows

def minimize_all():
    window_list = get_windows_list()
    for hwnd, title in window_list:
        # Use the provided hwnd
        window = pgw.Win32Window(hwnd)
        window.minimize()

if __name__ == "__main__":
    minimize_all()

© www.soinside.com 2019 - 2024. All rights reserved.