当前位置:编程学习 > C#/ASP.NET >>

关于C#下,获取、调用打印机的若干问题。。。大神们进啊

业务要求:编写一个软件,实现有驱和无驱状态下的打印,打印的信息是通过excel或者数据库读取,然后socket发送给打印机,打印机开始打印。
问题:1、无驱状态下,建立socket连接,但是socket连接一直不成功,代码如下:
 private void ConnetctPrint()
        {
            IPAddress ip = IPAddress.Parse("192.168.1.113");
            IPEndPoint ipEP = new IPEndPoint(ip, 9100);
            Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            c.BeginConnect(ipEP, new AsyncCallback(ConnectCallback), c);
            c.SendTimeout = 2000;
            if (c.Connected)//注意这里,这里一直是false!!!连接不成功
            {
                byte[] data = new byte[] { 0x1b, 0x40 };
                c.Send(data, data.Length, 0);
            }
        }
        /// <summary>
        /// 连接
        /// </summary>
        private void ConnectCallback(IAsyncResult ar)
        {
                Socket client = (Socket)ar.AsyncState;
                client.EndConnect(ar);
        }

2、有驱状态下,调用系统的API,打印机名称可以获取到,但是打印机连接不成功,代码如下:
private FileStream fs = null;
        [DllImport("kernel32.dll")]//调用系统API打印函数        
            public static extern IntPtr CreateFile (
             string FileName,          // file name         
            uint DesiredAccess,       // access mode     
            uint ShareMode,           // share mode     
            uint SecurityAttributes,  // Security Attributes   
            uint CreationDisposition, // how to create       
            uint FlagsAndAttributes,  // file attributes 
        int hTemplateFile         // handle to template file  
            );



        private string PrintPage(string strPos)
        {
            //获取所有打印机
            string[] printers = new string[PrinterSettings.InstalledPrinters.Count];
            PrinterSettings.InstalledPrinters.CopyTo(printers, 0);
            IntPtr iHandle = CreateFile(printers[1], 0x40000000, 0, 0, 3, 0, 0);
            //判断是否连接上打印机 -1为false      
            if (iHandle.ToInt32() == -1)// 注意这里,一直是-1,连接不成功!!!!
            {
                return "没有连接到打印机";
            }
            else
            {
                FileStream fs = new FileStream(iHandle, FileAccess.ReadWrite);             //StreamReader sr = new StreamReader(fs); 
                StreamWriter sw = new StreamWriter(fs, Encoding.Default);
                sw.WriteLine(strPos, 0, 500);
                sw.Close();
                fs.Close();
                return "已经成功连接打印机";
            }        
        }


提示:打印机和我的笔记本是在一个局域网内,通过wifi连接的,我在本地见一个txt文档,然后用TXT自带的打印功能进行打印,是可以打印成功的。用代码新建一个excel文件插入数据,直接调用excel自带
PrintOut();方法也是可以打印成功的。

各位大侠帮忙分析一下,是什么原因引起的这种情况???? C# API 打印
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,