如何在 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,-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 部分的解决方来自以下 Stack Overflow 帖子: Get text from popup window。 这需要一些修改

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

对于 2 和特别是 3 我仍然没有任何想法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)