我只为 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”。谢谢您的帮助:)
您可以使用
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()