vb.net 获取打印机状态

mitan 2014-07-12 07:01:55
求助高手!
1、获取电脑是否有联机打印机,并将联机打印机设置为默认打印机(状态为“就绪”的打印机)。
2、获取打印机状态,如果缺纸、缺墨、卡纸点。
3、可以初始化打印机一些参数(打印机首选项)
...全文
581 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
seeQe 2014-07-27
  • 打赏
  • 举报
回复
应该是可以的, 好像在哪里见过, 支持一下
沐NeMo 2014-07-24
  • 打赏
  • 举报
回复
不止以上那些,还要看看各个类型的打印机的接口,兼容,特别功能等。 打印机,没那么简单。
bw555 2014-07-24
  • 打赏
  • 举报
回复
收藏的获取打印机相关信息代码,收藏后我还没使用过,你自己试下把
using Microsoft.Win32;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing.Printing;
using System.Linq;
using System.Management;
using System.Text;
using System.Threading.Tasks;

namespace PrintCellLite.Model.Print
{
    class PrinterPropertyManager
    {
        /// <summary>
        /// 获取打印机的Location
        /// </summary>
        /// <param name="printerName">打印机名称</param>
        /// <returns>返回一个字符串</returns>
        public KeyValuePair<string,int> GetPrinterIPAndPort(string printerName)
        {
            string port = GetPortValue(printerName);
            if (string.IsNullOrEmpty(port)) { return new KeyValuePair<string, int>(); }
            //Query portName's property from regedit
            string[] portQuerys = GetPortQuerys(port);
            foreach (var portQuery in portQuerys)
            {
                RegistryKey portKey = Registry.LocalMachine.OpenSubKey(portQuery, RegistryKeyPermissionCheck.Default, System.Security.AccessControl.RegistryRights.QueryValues);
                if (portKey != null)
                {
                    object IPValue = portKey.GetValue("IPAddress", String.Empty, RegistryValueOptions.DoNotExpandEnvironmentNames);
                    object portValue = portKey.GetValue("PortNumber", String.Empty, RegistryValueOptions.DoNotExpandEnvironmentNames);
                    if (IPValue != null && portValue != null)
                    {
                        return new KeyValuePair<string, int>(IPValue.ToString(), (Int32)portValue);
                    }
                }
            }
            return new KeyValuePair<string,int>();
        }

        private string[] GetPortQuerys(string portName) 
        {
            return new string[] 
            {
                @"System\CurrentControlSet\Control\Print\Monitors\Advanced Port Monitor\Ports\" + portName,
                @"System\CurrentControlSet\Control\Print\Monitors\Local Port\Ports\" + portName,
                @"System\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\" + portName,
                @"System\CurrentControlSet\Control\Print\Monitors\USB Monitor\Ports\" + portName,
                @"System\CurrentControlSet\Control\Print\Monitors\WSD Port\Ports\" + portName,
            };
        }

        private string GetPortValue(string printerName) 
        {

            string port = string.Empty;
            //Query printer's portName from WIN32_Printer
            string query = string.Format("SELECT * from Win32_Printer WHERE Name = '{0}'", printerName);
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
            ManagementObjectCollection coll = searcher.Get();
            foreach (ManagementObject printer in coll)
            {
                PropertyData portNameProperty = printer.Properties["PortName"];
                if(portNameProperty != null)
                {
                    port = portNameProperty.Value.ToString();
                }
            }
            return port;
        }

        /// <summary>
        /// 获取打印机名字的列表
        /// </summary>
        /// <returns>返回一个ArrayList</returns>
        public ArrayList getPrinterName1()
        {
            ArrayList result = new ArrayList();

            foreach (string ss in PrinterSettings.InstalledPrinters)
            {
                result.Add(ss);
            }
            return result;
        }

        /// <summary>
        ///返回一个整形值,所代表的意思是打印机状态
        /// </summary>
        /// <param name="printerName">打印机名称</param>
        /// <returns>返回一个int值</returns>
        public int PrinterStatusInt(string printerName)
        {
            int ret = -1;
            string path = @"win32_printer.DeviceId='" + printerName + "'";
            ManagementObject printer = new ManagementObject(path);
            printer.Get();
            ret = Convert.ToInt32(printer.Properties["PrinterStatus"].Value);
            return ret;
        }

        /// <summary>
        /// 获取打印机状态
        /// </summary>
        /// <param name="printerName">打印机名称</param>
        /// <returns>返回一个字符串</returns>
        public string GetPrinterStatus(string printerName)
        {
            int result = PrinterStatusInt(printerName);
            string status = "";
            switch (result)
            {
                case 1:
                case 2:
                    status = "Unknow";
                    break;
                case 3: status = "Ready";
                    break;
                case 4:
                case 7:
                    status = "Printing";
                    break;
                case 5: status = "Warning";
                    break;
                case 6: status = "Pause";
                    break;
                case 8: status = "Offline";
                    break;
                default: status = "Error";
                    break;
            }
            return status;
        }

        enum PrinterStatus
        {
            Other = 1,
            Unknow = 2,
            Ready = 3,
            Printing = 4,
            Warming = 5,
            Pause = 6,
            Printing1 = 7,
            Offline = 8
        }
    }


}
平头哥哥 2014-07-18
  • 打赏
  • 举报
回复
获取打印机状态 vb源码:http://download.csdn.net/download/jmeycn/2961094 不知 你 是否下载过,这个 对USB打印机没有作用
mitan 2014-07-14
  • 打赏
  • 举报
回复
有人能帮我吗?
mitan 2014-07-12
  • 打赏
  • 举报
回复
是应用程序,并非WEB程序。
by_封爱 2014-07-12
  • 打赏
  • 举报
回复
单纯的网页想获取本地一切硬件信息都是徒劳无功的... 只能通过ocx....

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧