C# WinForms 实现打印监听组件

一、组件简介

打印监听组件是一款集成于 Windows 桌面环境的打印任务管理与监控工具,适用于企业级应用场景。它不仅支持多打印机任务的实时监控,还能通过 WebSocket 与外部系统集成,实现自动化打印、任务状态反馈、远程控制等功能。

二、界面功能介绍

1. 主界面与托盘集成

  • 主窗体:采用 WinForms 界面,包含多标签页(TabControl),每个标签页对应一台本地打印机,便于分组管理。
    C# WinForms 实现打印监听组件
  • 托盘图标:程序最小化后驻留于系统托盘,双击可快速还原主界面,支持右键菜单操作(如退出、重启、服务设置等)。
    C# WinForms 实现打印监听组件

2. 打印机管理

  • 打印机列表:自动检测本地所有已安装打印机,支持设置默认打印机、查看打印机属性。
/// <summary>
/// 绑定本地打印机列表到菜单
/// </summary>
internal void BindPrintersToMenu()
{
   
   
    默认打印机ToolStripMenuItem.DropDownItems.Clear();
    // 获取当前系统默认打印机
    string defaultPrinter = new System.Drawing.Printing.PrinterSettings().PrinterName;

    // 先添加默认打印机(始终第一行)
    var defaultItem = new ToolStripMenuItem(defaultPrinter)
    {
   
   
        Checked = true
    };
    defaultItem.Click += (s, e) => SetDefaultPrinterUI(defaultPrinter);
    // 添加“首选项”子菜单
    var prefItem = new ToolStripMenuItem("首选项");
    prefItem.Click += (s, e) => ShowPrinterProperties(defaultPrinter);
    defaultItem.DropDownItems.Add(prefItem);
    默认打印机ToolStripMenuItem.DropDownItems.Add(defaultItem);

    // 再添加其他打印机(排除默认打印机)
    foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
    {
   
   
        if (printer == defaultPrinter)
            continue;

        var item = new ToolStripMenuItem(printer)
        {
   
   
            Checked = false
        };
        item.Click += (s, e) => SetDefaultPrinterUI(printer);

        var prefItem2 = new ToolStripMenuItem("首选项");
        prefItem2.Click += (s, e) => ShowPrinterProperties(printer);
        item.DropDownItems.Add(prefItem2);

        默认打印机ToolStripMenuItem.DropDownItems.Add(item);
    }

}
 /// <summary>  
 /// UI和系统都设置默认打印机 
 /// </summary>  
 /// <param name="printerName"></param>  
 private void SetDefaultPrinterUI(string printerName)
 {
   
   
     foreach (ToolStripMenuItem item in 默认打印机ToolStripMenuItem.DropDownItems)
         item.Checked = item.Text == printerName;

     // 如需设置为系统默认打印机,可调用 Win32 API(可选)  
     SetSystemDefaultPrinter(printerName);
 }
 /// <summary>
/// 显示打印机首选项对话框
/// </summary>
/// <param name="printerName"></param>
private void ShowPrinterProperties(string printerName)
{
   
   
    // 使用rundll32调用打印机属性对话框
    //string args = $"printui.dll,PrintUIEntry /p /n \"{printerName}\"";
    //•	/e 参数表示直接打开“首选项”对话框
    string args = $"printui.dll,PrintUIEntry /e /n \"{
     
     printerName}\"";
    var psi = new System.Diagnostics.ProcessStartInfo
    {
   
   
        FileName = "rundll32.exe",
        Arguments = args,
        UseShellExecute = false,
        CreateNoWindow = true
    };
    try
    {
   
   
        System.Diagnostics.Process.Start(psi);
    }
    catch (Exception ex)
    {
   
   
        MessageBox.Show("无法打开打印机首选项窗口:" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}
  • TabControl:每台打印机一个标签页,便于查看和管理各自的打印任务。
 /// <summary>
 /// 绑定本地打印机列表到TabControl
 /// </summary>
 private void BindPrintersToTabControl()
 {
   
   
     tabControl1.TabPages.Clear();

     string defaultPrinter = new System.Drawing.Printing.PrinterSettings().PrinterName;
     List<string> printers = new List<string>();

     // 先将默认打印机添加到列表首位
     printers.Add(defaultPrinter);

     // 再添加其他打印机(排除默认打印机)
     foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
     {
   
   
         if (printer != defaultPrinter)
             printers.Add(printer);
     }

     foreach (string printer in printers)
     {
   
   
         var tabPage = new TabPage(printer);
         // 创建DataGridView
         var dgv = new DataGridView
         {
   
   
             Dock = DockStyle.Fill,
             ReadOnly = true,
             AllowUserToAddRows = false,
             AllowUserToDeleteRows = false,
             RowHeadersVisible = false,
             AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
         };

         // 添加列
         dgv.Columns.Add("clientIp", "来源");
         dgv.Columns.Add("taskId",
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值