微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Windows 中弹出打印作业窗口时获得通知?

如何解决如何在 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 举报,一经查实,本站将立刻删除。