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

C# 检查打印机是否连接到电脑,c#,C#,我需要写一些代码,当打印机插入计算机时,提示打印机已连接,当我从计算机中拔出打印机时,也会提示打印机未连接。我还想通过组合框列出可用的打印机。如何使用Visual Studio在C中执行此操作 您应该使用 C签名: [DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention =

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

您应该使用

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引用。

插入/插入似乎没问题。。但是你说的组合框是什么意思??当你想要它的时候??当时还是印刷?然后让我告诉你windows默认情况下Ctrl+P用于列出打印机并选择一台。。对于插拔,我们可以试试。。!看一看:我想把安装的打印机列表放到一个组合框中,先生。如果你不理解我的一些问题,我仍然在c很抱歉。这似乎列出了系统上有驱动程序的打印机,但是如果它们被拔下,它还能工作吗?@Eric同意你的观点。。正当我可能不会减少计数。。由于驱动程序仍在安装中。。让我试试吧,先生,嗯,我是c语言的新手,我不知道如何把这些代码放到windows窗体中。你能给我点化一下吗。这对我来说很难:我仍然不知道如何正确处理异常sir@DeepakSharma.on button click event您只需要调用上面定义的方法。。GetAvailablePrints将返回表示打印机名称的字符串数组。。