如题网上找了很多都不好使,打印机有切纸指令: 16进制 1B 64 00 10进制 27 100 00试了一些调用c++ 的方法,WriteFile 没发送成指令倒是把指令打印到纸上。希望不吝赐教 ,谢谢。

解决方案 »

  1.   

    //C#控制打印机(直接发送打印机命令到打印机)//一个打印机控制类,很有用的,其中使用了windows api控制lpt端口,对条码打印机的控制方法如下:将打印机的命令写到一个文件里,再使用之。//代码:using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices; namespace LPTControls{    public class LPTControls    {        [StructLayout(LayoutKind.Sequential)]        private struct OVERLAPPED        {            int Internal;            int InternalHigh;            int Offset;            int OffSetHigh;            int hEvent;        }        [DllImport("kernel32.dll")]        private static extern int CreateFile(string lpFileName, uint dwDesiredAccess, int dwShareMode, int lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile);         [DllImport("kernel32.dll")]        private static extern bool WriteFile(int hFile, byte[] lpBuffer, int nNumberOfBytesToWriter, out int lpNumberOfBytesWriten, out OVERLAPPED lpOverLapped);         [DllImport("kernel32.dll")]        private static extern bool CloseHandle(int hObject);         private int iHandle;         //打开LPT 端口        public bool Open()        {            iHandle = CreateFile("lpt1", 0x40000000, 0, 0, 3, 0, 0);            if (iHandle != -1)            {                return true;            }            else            {                return false;            }        }        //打印函数,参数为打印机的命令或者其他文本!        public bool Write(string MyString)        {            if (iHandle != 1)            {                int i;                OVERLAPPED x;                byte[] mybyte = System.Text.Encoding.Default.GetBytes(MyString);                return WriteFile(iHandle, mybyte, mybyte.Length, out i, out x);            }            else            {                throw new Exception("端口未打开~!");            }        }        //关闭打印端口        public bool Close()        {            return CloseHandle(iHandle);        }    }} //***************************************************************//使用方法private void button1_Click(object sender, EventArgs e){    LPTControls.LPTControls lpt = new LPTControls.LPTControls();    string mycommanglines = System.IO.File.ReadAllText("print.txt");//print.txt里写了条码机的命令    lpt.Open();    lpt.Write(mycommanglines);    lpt.Close(); }
      

  2.   

     public bool Write(byte[] mybyte)
            {
                if (iHandle != -1)
                {
                    OVERLAPPED x = new OVERLAPPED();
                    int i = 0;
                    return WriteFile(iHandle, mybyte, mybyte.Length, ref i, ref x);
                }
                else
                {
                    throw new Exception("不能连接到打印机!");
                }
            }
    用的这个发送命令的。