如果连接到PC,请检查打印机

时间:2014-11-03 09:00:27

标签: c#

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

2 个答案:

答案 0 :(得分:0)

您应该使用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
}

答案 1 :(得分:0)

立即获得新打印机找到/断开的弹出窗口...你必须要在后台连续运行一些代码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 引用。