Я хочу скрыть все запущенные окна с помощью Python

Я создаю эту программу только для 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». Спасибо за помощь :)

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

Nick Gris 20.05.2024 17:48

.title и .left не очень хороши, но я попробую сделать window.visible == Ложное редактирование*: это не работает, я думаю, это из-за проблемы, о которой я упоминал ранее: когда я запускаю код Python, появляется серый прямоугольник рядом с полем поиска панели инструментов Windows. я не знаю, почему

Coding Genius 20.05.2024 17:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать 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()

вау! это работает очень хорошо. :) Спасибо за ваш ответ!

Coding Genius 20.05.2024 20:33

Другие вопросы по теме