关于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#