检查打印机是否连接到电脑

本文关键字:电脑 连接 是否 打印机 检查 | 更新日期: 2023-09-27 18:28:48

我需要写一些代码,当打印机插入计算机时,会提示一条消息"打印机已连接",当我从计算机中拔出打印机时,还会提示一条信息"打印机未连接"。我还想列出通过combobox可用的打印机。如何使用Visual Studio在C#中执行此操作?

检查打印机是否连接到电脑

您应该使用Winspool.lib

C#签名:

[DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter, IntPtr pd);

编辑:

你也可以使用这个

foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
   //Add in combo box
}

立即获得新打印机找到/断开连接的弹出窗口。。。你必须在后台连续运行一些代码Windows服务是最好的。。使用以下代码,您可以获得已安装的打印机,因此首先将当前安装的打印机存储在列表中,每10秒(或您想要的任何一秒)后,如果发现差异,请再次获得已安装打印机,并相应地发送消息。。

这是获取已安装打印机的片段。。

private string[] GetAvailablePrinters()
{
    var installedPrinters = new string[PrinterSettings.InstalledPrinters.Count];
    PrinterSettings.InstalledPrinters.CopyTo(installedPrinters, 0);
    var printers = new List<string>();
    var printServers = new List<string>();
    var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer");
    foreach (var printer in searcher.Get())
    {
        var serverName = @"''" + printer["SystemName"].ToString().TrimStart('''');
        if (!printServers.Contains(serverName))
            printServers.Add(serverName);
    }
    foreach (var printServer in printServers)
    {
        var server = new PrintServer(printServer);
        try
        {
            var queues = server.GetPrintQueues();
            printers.AddRange(queues.Select(q => q.Name));
        }
        catch (Exception)
        {
            // Handle exception correctly
        }
    }
    return printers.ToArray();
}

您可能需要在项目中添加System.Management、System.Drawing、System.Printing引用。。