Как получать уведомления о всплывающем окне Print-job-window в Windows?

Мы все знакомы с окном печати (например, при нажатии ctrl+p или нажатии кнопки печати в некоторых программах). Есть ли способ получать уведомления [ловить любой сигнал] (когда пользователь пытается что-то напечатать), когда всплывающее окно печати _ в Python? Я попытался с помощью приведенного ниже кода узнать, какое окно в данный момент активно, но я предполагаю, что окно печати не принадлежит к категории активных окон, потому что ничего не происходит.

          def all_apps_running(self):
        """ looks throgh wind32processes to find all Foreground running apps """
        try:
            hwnd = ctypes.windll.user32.GetForegroundWindow()
            _, pid = win32process.GetWindowThreadProcessId(hwnd)
            exe = ""
            for p in self.c.query('SELECT Name FROM Win32_Process WHERE ProcessId = %s' % str(pid)):
                exe = p.Name
                break
        except:
            return None
        else:
            return exe
    ...

Я нашел некоторую информацию о событии принтера (например, приведенный ниже код, я пробовал больше), но это работает после того, как пользователь отправляет какое-либо задание на печать на принтер, и мне нужно показать пользователю уведомление, точно так же, как появится окно печати.

      if __name__ == "__main__":
    job = {}
    while True:
        printer_name = win.GetDefaultPrinter()
        hprinter = win.OpenPrinter(printer_name)
        job_tuple = win.EnumJobs(hprinter, 0, -1, 1)

        for job_info in job_tuple:
            job = win.GetJob(hprinter, job_info["JobId"], win.JOB_INFO_1)
            break

Итак, очевидно, у нас есть 3 типа категории Print-Popup-Window:

  1. Диалоговое окно печати Microsoft Windows по умолчанию
  2. Пользовательский диалог печати любого программного обеспечения (например, в Word)
  3. Браузерное приложение для предварительного просмотра (как в Google Chrome)

Решение для части 1 из следующего сообщения о переполнении стека:получить текст из всплывающего окна . Это требует лишь некоторой модификации:

      import time, win32gui
while True:
    window = win32gui.GetForegroundWindow()
    title = win32gui.GetWindowText(window)
    if title == "Print":
        do stuff

для 2 и особенно 3 у меня до сих пор нет идеи

0 ответов

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