import win32print
import time
import tkinter as tk
from win10toast import ToastNotifier

def verificar_fila_impressao():
    todas_impressoras = win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL, None, 1)
    toaster = ToastNotifier()

    for impressora in todas_impressoras:
        nome_impressora = impressora[2]  # Acessando o nome da impressora
        handle = win32print.OpenPrinter(nome_impressora)
        info = win32print.GetPrinter(handle, 2)

        # Acessando o número de trabalhos de impressão
        qtd_trabalhos = info['cJobs']

        if qtd_trabalhos > 0:
            mensagem = f"Existem {qtd_trabalhos} trabalhos de impressão na impressora {nome_impressora}"
            toaster.show_toast("Fila de Impressão", mensagem, duration=10)

        win32print.ClosePrinter(handle)

def limpar_fila_impressao():
    todas_impressoras = win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL, None, 1)

    for impressora in todas_impressoras:
        nome_impressora = impressora[2]  # Acessando o nome da impressora
        handle = win32print.OpenPrinter(nome_impressora)

        # Obtendo informações da impressora padrão
        default_printer_info = win32print.GetPrinter(handle, 2)
        devmode = default_printer_info['pDevMode']

        # Criar um dicionário PRINTER_INFO_2 completo para limpar a fila de impressão
        info = {
            'pServerName': None,
            'pPrinterName': nome_impressora,
            'pShareName': '',
            'pPortName': '',
            'pDriverName': '',
            'pComment': '',
            'pLocation': '',
            'pDevMode': devmode,
            'pSepFile': '',
            'pPrintProcessor': '',
            'pDatatype': '',
            'pParameters': '',
            'pSecurityDescriptor': None,
            'Attributes': 0,
            'Priority': 0,
            'DefaultPriority': 0,
            'StartTime': 0,
            'UntilTime': 0,
            'Status': 0,
            'cJobs': 0,
            'AveragePPM': 0
        }

        # Chamar SetPrinter para limpar a fila de impressão
        win32print.SetPrinter(handle, 2, info, 0)

        win32print.ClosePrinter(handle)

def atualizar():
    verificar_fila_impressao()
    atualizar_labels()
    root.after(300000, atualizar)  # Atualiza a cada 5 minutos (300000 ms)

def atualizar_labels():
    todas_impressoras = win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL, None, 1)
    for i, impressora in enumerate(todas_impressoras):
        nome_impressora = impressora[2]  # Acessando o nome da impressora
        handle = win32print.OpenPrinter(nome_impressora)
        info = win32print.GetPrinter(handle, 2)
        qtd_trabalhos = info['cJobs']
        labels[i].config(text=f"Impressora: {nome_impressora}, Trabalhos: {qtd_trabalhos}")
        win32print.ClosePrinter(handle)

# Criar a janela principal
root = tk.Tk()
root.title("Verificador de Fila de Impressão")

# Adicionar um rótulo
label = tk.Label(root, text="Clique no botão para verificar a fila de impressão")
label.pack(pady=10)

# Adicionar botão de verificação
button_verificar = tk.Button(root, text="Verificar Fila de Impressão", command=verificar_fila_impressao)
button_verificar.pack(pady=5)

# Adicionar botão de limpar fila de impressão
button_limpar = tk.Button(root, text="Limpar Fila de Impressão", command=limpar_fila_impressao)
button_limpar.pack(pady=5)

# Adicionar labels para exibir a quantidade de trabalhos em cada fila
labels = []
todas_impressoras = win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL, None, 1)
for impressora in todas_impressoras:
    nome_impressora = impressora[2]  # Acessando o nome da impressora
    label_impressora = tk.Label(root, text="")
    label_impressora.pack()
    labels.append(label_impressora)

# Iniciar a verificação automática da fila de impressão
atualizar()

# Iniciar a interface gráfica
root.mainloop()

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: