Я создаю эту программу только для 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, Кортана или даже пустые имена. Также я не хочу использовать pyautogui, чтобы просто нажать «win+d». Спасибо за помощь :)
.title и .left не очень хороши, но я попробую сделать window.visible == Ложное редактирование*: это не работает, я думаю, это из-за проблемы, о которой я упоминал ранее: когда я запускаю код Python, появляется серый прямоугольник рядом с полем поиска панели инструментов Windows. я не знаю, почему






Вы можете использовать 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()
вау! это работает очень хорошо. :) Спасибо за ваш ответ!
Это не будет идеальным решением, но вы могли бы обратить внимание на некоторые вещи, чтобы решить, следует ли игнорировать окно:
window.visible == False,window.title == '',window.width == 0иwindow.left < -1000(предполагается, что оно намеренно вынесено за пределы экрана, хотя это не обязательно, если у вас есть несколько мониторы).