一、组件简介
打印监听组件是一款集成于 Windows 桌面环境的打印任务管理与监控工具,适用于企业级应用场景。它不仅支持多打印机任务的实时监控,还能通过 WebSocket 与外部系统集成,实现自动化打印、任务状态反馈、远程控制等功能。
二、界面功能介绍
1. 主界面与托盘集成
- 主窗体:采用 WinForms 界面,包含多标签页(TabControl),每个标签页对应一台本地打印机,便于分组管理。

- 托盘图标:程序最小化后驻留于系统托盘,双击可快速还原主界面,支持右键菜单操作(如退出、重启、服务设置等)。

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",


639

被折叠的 条评论
为什么被折叠?



