检查打印机是否连接到电脑
本文关键字:电脑 连接 是否 打印机 检查 | 更新日期: 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引用。。