none
关于win32_printer返回值的问题 RRS feed

  • 问题

  • 大家好,以下是判断打印机状态的,参照网上的文章写得,现在能够正常获取的状态是:空闲、正在打印。但是当我打印机关机或者Error状态时,仍是返回空闲,这是为什么呢?谢谢。

        public enum PrinterStatus
        {
          其他状态 = 1,
          未知,
          空闲,
          正在打印,
          预热,
          停止打印,
          打印中,
          离线
        }
    
        /// <summary>
        /// 获取打印机的当前状态
        /// </summary>
        /// <param name="PrinterDevice">打印机设备名称</param>
        /// <returns>打印机状态</returns>
        public static PrinterStatus GetPrinterStatus(string PrinterDevice)
        {
          PrinterStatus ret = 0;
          string path = @"win32_printer.DeviceId='" + PrinterDevice + "'";
          ManagementObject printer = new ManagementObject(path);
          printer.Get();
          ret = (PrinterStatus)Convert.ToInt32(printer.Properties["PrinterStatus"].Value);
          return ret;
        }
    2011年2月11日 3:11

答案

  • Hi 星际,

    ManagementObject对象加上using块试试:
            static PrinterStatus GetPrinterStat(string printerDevice)

            {

                PrinterStatus ret = 0;

                string path = "win32_printer.DeviceId='" + printerDevice + "'";

                using (ManagementObject printer = new ManagementObject(path))

                {

                    printer.Get();

                    ret = (PrinterStatus)Convert.ToInt32(printer.Properties["PrinterStatus"].Value);

                }

                return ret;

            }



    Sincerely,
    Leo Liu

    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年2月15日 3:09
    版主

全部回复

  • 看来是比较复杂的问题。。。。汗了。。。
    2011年2月11日 13:04
  • Hi 星际,

    欢迎来到MSDN论坛。
    您的帖子还可以再次编辑,请在打开编辑窗口之后找到最右边的工具按钮“插入代码块”,在弹出窗口中选择“C#”。
    这样重写编辑之后方便论坛的大侠和朋友们帮助你解决问题。

    Sincerely,
    Leo Liu


    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年2月14日 2:53
    版主
  • 哈,一直没发现有这个功能,谢谢

    2011年2月14日 12:11
  • Hi 星际,

    ManagementObject对象加上using块试试:
            static PrinterStatus GetPrinterStat(string printerDevice)

            {

                PrinterStatus ret = 0;

                string path = "win32_printer.DeviceId='" + printerDevice + "'";

                using (ManagementObject printer = new ManagementObject(path))

                {

                    printer.Get();

                    ret = (PrinterStatus)Convert.ToInt32(printer.Properties["PrinterStatus"].Value);

                }

                return ret;

            }



    Sincerely,
    Leo Liu

    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年2月15日 3:09
    版主