使用C#.net将打印命令直接发送到LPT并行端口

时间:2011-01-14 15:53:33

标签: c# printing lpt

在DOS中,我们可以这样做:

ECHO MESSAGE>LPT1

我们如何在C#.NET中实现同样的目标?

使用C#.NET将信息发送到COM1似乎很容易。

LPT1端口怎么样?

我想将Escape命令发送到热敏打印机。

3 个答案:

答案 0 :(得分:2)

在C#4.0及更高版本中,首先需要使用CreateFile方法连接到该端口,然后打开一个文件流到该端口,最后写入它。 这是一个示例类,它在LPT1上将两行写入打印机。

using Microsoft.Win32.SafeHandles;
using System;
using System.IO;
using System.Runtime.InteropServices;

namespace YourNamespace
{
    public static class Print2LPT
        {
            [DllImport("kernel32.dll", SetLastError = true)]
            static extern SafeFileHandle CreateFile(string lpFileName, FileAccess dwDesiredAccess,uint dwShareMode, IntPtr lpSecurityAttributes, FileMode dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile);

            public static bool Print()
            {
                string nl = Convert.ToChar(13).ToString() + Convert.ToChar(10).ToString();
                bool IsConnected= false;

                string sampleText ="Hello World!" + nl +
                "Enjoy Printing...";     
                try
                {
                    Byte[] buffer = new byte[sampleText.Length];
                    buffer = System.Text.Encoding.ASCII.GetBytes(sampleText);

                    SafeFileHandle fh = CreateFile("LPT1:", FileAccess.Write, 0, IntPtr.Zero, FileMode.OpenOrCreate, 0, IntPtr.Zero);
                    if (!fh.IsInvalid)
                    {
                        IsConnected= true;                    
                        FileStream lpt1 = new FileStream(fh,FileAccess.ReadWrite);
                        lpt1.Write(buffer, 0, buffer.Length);
                        lpt1.Close();
                    }

                }
                catch (Exception ex)
                {
                    string message = ex.Message;
                }

                return IsConnected;
            }
        }
}

假设您的打印机已连接到LPT1端口,如果不是,则需要调整CreateFile方法以匹配您正在使用的端口。

您可以使用以下行

在程序中的任何位置调用该方法
Print2LPT.Print();

我认为这是解决问题的最短,最有效的方法。

答案 1 :(得分:1)

您可以随时尝试此代码example

溴 安德斯

答案 2 :(得分:0)

您应该从microsoft的这篇文章中获得一些帮助: How to send raw data to a printer by using Visual C# .NET