You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于.NET Framework 4.7用C#获取打印机信息的问题求助

Winforms获取打印机详细信息解决方案

解决IsPrinting返回false的问题

你的第一段代码存在两个核心问题:

  1. 变量名MachineName混淆了概念,PrintQueue构造函数的第二个参数需要传入打印机名称,而非机器名称。你需要替换成目标打印机的实际名称(可在「控制面板-设备和打印机」中查看)。
  2. 默认初始化PrintQueue时未指定足够的访问权限,导致无法获取实时打印机状态。创建PrintQueue时需指定PrintSystemDesiredAccess.ReadPrinter权限。

修正后的代码:

// 替换为实际打印机名称
string printerName = "目标打印机名称";
LocalPrintServer localPrintServer = new LocalPrintServer();
// 指定读取权限创建PrintQueue
PrintQueue pq = new PrintQueue(localPrintServer, printerName, PrintSystemDesiredAccess.ReadPrinter);
pq.Refresh();
MessageBox.Show(pq.IsPrinting.ToString());

解决“Win32 Access Denied”权限错误

第二段代码的问题在于使用了PrintSystemDesiredAccess.UsePrinter权限,但仅查看打印机信息和打印任务时,ReadPrinter权限已足够,且能避免不必要的权限触发。另外:

  • 若访问本地打印机,建议右键程序选择「以管理员身份运行」;
  • 若访问网络打印机,需确保当前用户有权限读取该共享打印机的信息。

修正后的代码:

string printerName = "目标打印机名称";
using (var ps = new PrintServer())
{
    // 使用读取权限替代操作权限
    using (var pq = new PrintQueue(ps, printerName, PrintSystemDesiredAccess.ReadPrinter))
    {
        foreach (var job in pq.GetPrintJobInfoCollection())
        {
            MessageBox.Show($"任务名称:{job.Name},状态:{job.JobStatus}");
        }
    }
}

额外提示

  • 若要获取纸张规格、端口配置等更详细的打印机信息,可访问PrintQueue.PropertiesCollection,同样需确保拥有对应访问权限;
  • 网络打印机需确认共享设置正常,且当前用户能访问该共享资源。

内容的提问来源于stack exchange,提问作者محمد السروجي

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 12:11:01