【问题标题】:Cannot delete printer from control panel via Win32 API on Windows 8.1 and Windows 10无法通过 Windows 8.1 和 Windows 10 上的 Win32 API 从控制面板删除打印机
【发布时间】:2016-04-07 10:44:47
【问题描述】:

我正在尝试以编程方式从 Windows 中删除打印机条目,它似乎适用于 TCP/IP 打印机,但不适用于分配给 USB 端口的打印机。实际上,打印机条目从 Win32_Printer WMI 集合中消失了,但它仍然存在于“控制面板 - 设备和打印机”中。它只有名称,没有分配驱动程序和附加信息。 我试图通过 ManagementScope 和“DeletePrinter”Print Spooler API 方法来做到这一点。我的代码sn-ps:

管理范围:

ManagementScope scope = new ManagementScope(ManagementPath.DefaultPath);
scope.Connect();
SelectQuery query = new SelectQuery("select * from Win32_Printer WHERE Name LIKE '" + printerName + "'");
ManagementObjectSearcher search = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection printersCollection = search.Get();
foreach (ManagementObject printer in printersCollection)
   printer.Delete();

删除打印机:

[DllImport("winspool.drv", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
static extern bool DeletePrinter(IntPtr hPrinter);

[DllImport("winspool.drv", SetLastError = true)]
static extern int ClosePrinter(IntPtr hPrinter);

[DllImport("winspool.drv", CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public static extern int OpenPrinter(string pPrinterName, out IntPtr phPrinter, IntPtr pDefault);

private static bool DeletePrinter(string printerName)
{
   var pd = new PRINTER_DEFAULTS { DesiredAccess = 8 | 4 | 0x000F0000 };
   var rawsize = Marshal.SizeOf(pd);
   var pdPtr = Marshal.AllocHGlobal(rawsize);
   Marshal.StructureToPtr(pd, pdPtr, true);
   IntPtr hPrinter;
   if (OpenPrinter(printerName, out hPrinter, pdPtr) != 0)
   {
      if (hPrinter != IntPtr.Zero)
      {
         var result = DeletePrinter(hPrinter);
         ClosePrinter(hPrinter);
         return result;
      }
   }
   return false;
}

【问题讨论】:

    标签: c# .net winapi printing wmi


    【解决方案1】:

    我也有同样的问题。 我为 Microsoft 创建了支持事件,他们确认这是操作系统中的错误。

    【讨论】:

      猜你喜欢
      • 2015-11-23
      • 2016-10-30
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      相关资源
      最近更新 更多