Send print commands directly to LPT parallel port

2019-01-28 16:41发布

This question already has an answer here:

As in DOS we can do:

ECHO MESSAGE>LPT1

How can we achieve same thing in C# .NET?

Sending information to COM1 seems to be easy using C# .NET.

What about LPT1 ports?

I want to send Escape commands to the thermal printer.

标签: c# printing lpt
3条回答
甜甜的少女心
2楼-- · 2019-01-28 16:58

In C# 4.0 and later its possible, first you need to connect to that port using the CreateFile method then open a filestream to that port to finally write to it. Here is a sample class that writes two lines to the printer on 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;
            }
        }
}

Assuming your printer is connected on the LPT1 port, if not you will need to adjust the CreateFile method to match the port you are using.

you can call the method anywhere in your program with the following line

Print2LPT.Print();

I think this is the shortest and most efficient solution to your problem.

查看更多
混吃等死
3楼-- · 2019-01-28 17:02

You should get some help from this article from microsoft: How to send raw data to a printer by using Visual C# .NET

查看更多
Explosion°爆炸
4楼-- · 2019-01-28 17:08

You could always try this code example.

Br Anders

查看更多
登录 后发表回答