Search code examples
c#.netdllimportkernel32lpt

Send data to LPT on windows XP


I want to send data to a printer on LPT1 and i trying exactly this but my CreateFile returns -1 (The system cannot find the file specified.Exception from HRESULT:0x80070002). How to open LPT1 port and send data to? I am trying this on XP and after that in win7 64 bit because from what i've read working with LPT in win7 64 bit is a bit of a problem, or should i say 64 bit of a problem:)

PS:Since it's my first post this year: Happy New year to everybody.


Solution

  • You can try the following. Works fine for text mode.

    'net share' shows the following:

    Share name   Resource                        Remark
    
    -------------------------------------------------------------------------------
    IPC$                                         Remote IPC
    D$           D:\                             Default share
    print$       C:\WINDOWS\system32\spool\drivers
                                                 Printer Drivers
    wwwroot$     c:\inetpub\wwwroot              Used for file share access to web
    C$           C:\                             Default share
    ADMIN$       C:\WINDOWS                      Remote Admin
    SharedDocs   C:\DOCUMENTS AND SETTINGS\ALL USERS\DOCUMENTS
    
    Printer2     IP_192.168.115.227     Spooled  HP LaserJet 2200 Series PS (MS)
    TEST         LPT1:                  Spooled  Microsoft XPS Document Writer
    The command completed successfully.
    

    And here's the code

    using System;
    using System.IO;
    
    namespace SimplePrinting
    {
        /// <summary>
        /// Summary description for Class1.
        /// </summary>
        class SimplePrinting
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                string printingTaskFileName = Path.GetTempFileName(); // file in %temp%
    
                System.IO.FileStream printingTaskFile;
                System.IO.StreamWriter printingTaskStream;
    
                printingTaskFile = new System.IO.FileStream(printingTaskFileName, FileMode.Append);
                printingTaskStream = new System.IO.StreamWriter(printingTaskFile, System.Text.Encoding.Default);
    
                printingTaskStream.Write("some content here");
                printingTaskStream.Flush();
                printingTaskStream.Close();
    
                File.Copy(printingTaskFileName, @"\\127.0.0.1\TEST", true); // also can be \\127.0.0.1\PNT5 or smth like that
                File.Delete(printingTaskFileName);
            }
        }
    }