打印机口lpt和com口可以用kernel32.dll中的读写文件的办法,所用接口如下:

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 nNumberOfBytesToWrite, ref int lpNumberOfBytesWritten, ref OVERLAPPED lpOverlapped);
        [DllImport("kernel32.dll")]
        private static extern bool CloseHandle(int hObject);

public bool Write(byte[] mybyte)

{

iHandle = CreateFile(_linkStr, 0x40000000, 0, 0, 3, 0, 0);

//如果端口为打开,则提示,打开,则打印  
            if (iHandle != -1)
            {
                OVERLAPPED x = new OVERLAPPED();
                int i = 0;
                bool result = WriteFile(iHandle, mybyte, mybyte.Length, ref i, ref x);
                return result;
            }

}

如果是USB类型的需要用winspool.Drv的接口

#region Declaration Dll

[DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi,
            ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter,
            IntPtr pd);

[DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, ExactSpelling = true,
            CallingConvention = CallingConvention.StdCall)]
        public static extern bool ClosePrinter(IntPtr hPrinter);

[DllImport("winspool.Drv", EntryPoint = "StartDocPrinterA", SetLastError = true, CharSet = CharSet.Ansi,
            ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool StartDocPrinter(IntPtr hPrinter, int level,
            [In] [MarshalAs(UnmanagedType.LPStruct)] DOCINFOA di);

[DllImport("winspool.Drv", EntryPoint = "EndDocPrinter", SetLastError = true, ExactSpelling = true,
            CallingConvention = CallingConvention.StdCall)]
        public static extern bool EndDocPrinter(IntPtr hPrinter);

[DllImport("winspool.Drv", EntryPoint = "StartPagePrinter", SetLastError = true, ExactSpelling = true,
            CallingConvention = CallingConvention.StdCall)]
        public static extern bool StartPagePrinter(IntPtr hPrinter);

[DllImport("winspool.Drv", EntryPoint = "EndPagePrinter", SetLastError = true, ExactSpelling = true,
            CallingConvention = CallingConvention.StdCall)]
        public static extern bool EndPagePrinter(IntPtr hPrinter);

[DllImport("winspool.Drv", EntryPoint = "WritePrinter", SetLastError = true, ExactSpelling = true,
            CallingConvention = CallingConvention.StdCall)]
        public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, int dwCount, out int dwWritten);

#endregion
具体代码如下:

using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;

namespace ccss
{
    internal class RawPrinterHelper
    {
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public class DOCINFOA
        {
            [MarshalAs(UnmanagedType.LPStr)] public string pDocName;
            [MarshalAs(UnmanagedType.LPStr)] public string pOutputFile;
            [MarshalAs(UnmanagedType.LPStr)] public string pDataType;
        }

#region Declaration Dll

[DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi,
            ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter,
            IntPtr pd);

[DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, ExactSpelling = true,
            CallingConvention = CallingConvention.StdCall)]
        public static extern bool ClosePrinter(IntPtr hPrinter);

[DllImport("winspool.Drv", EntryPoint = "StartDocPrinterA", SetLastError = true, CharSet = CharSet.Ansi,
            ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool StartDocPrinter(IntPtr hPrinter, int level,
            [In] [MarshalAs(UnmanagedType.LPStruct)] DOCINFOA di);

[DllImport("winspool.Drv", EntryPoint = "EndDocPrinter", SetLastError = true, ExactSpelling = true,
            CallingConvention = CallingConvention.StdCall)]
        public static extern bool EndDocPrinter(IntPtr hPrinter);

[DllImport("winspool.Drv", EntryPoint = "StartPagePrinter", SetLastError = true, ExactSpelling = true,
            CallingConvention = CallingConvention.StdCall)]
        public static extern bool StartPagePrinter(IntPtr hPrinter);

[DllImport("winspool.Drv", EntryPoint = "EndPagePrinter", SetLastError = true, ExactSpelling = true,
            CallingConvention = CallingConvention.StdCall)]
        public static extern bool EndPagePrinter(IntPtr hPrinter);

[DllImport("winspool.Drv", EntryPoint = "WritePrinter", SetLastError = true, ExactSpelling = true,
            CallingConvention = CallingConvention.StdCall)]
        public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, int dwCount, out int dwWritten);

#endregion

#region Methods

// SendBytesToPrinter()
        // When the function is given a printer name and an unmanaged array
        // of bytes, the function sends those bytes to the printer queue.
        // Returns true on success, false on failure.
        public static bool SendBytesToPrinter(string szPrinterName, IntPtr pBytes, int dwCount)
        {
            int dwError = 0, dwWritten = 0;
            var hPrinter = new IntPtr(0);
            var di = new DOCINFOA();
            var bSuccess = false; // Assume failure unless you specifically succeed.

di.pDocName = "VIP RAW PrinterDocument";
            di.pDataType = "RAW";

// Open the printer.
            if (OpenPrinter(szPrinterName.Normalize(), out hPrinter, IntPtr.Zero))
            {
                // Start a document.
                if (StartDocPrinter(hPrinter, 1, di))
                {
                    // Start a page.
                    if (StartPagePrinter(hPrinter))
                    {
                        // Write your bytes.
                        bSuccess = WritePrinter(hPrinter, pBytes, dwCount, out dwWritten);
                        EndPagePrinter(hPrinter);
                    }
                    EndDocPrinter(hPrinter);
                }
                ClosePrinter(hPrinter);
            }
            // If you did not succeed, GetLastError may give more information
            // about why not.
            if (bSuccess == false)
                dwError = Marshal.GetLastWin32Error();

return bSuccess;
        }

public static bool SendFileToPrinter(string szPrinterName, string szFileName)
        {
            // Open the file.
            var fs = new FileStream(szFileName, FileMode.Open);

// Create a BinaryReader on the file.
            var br = new BinaryReader(fs);

// Dim an array of bytes big enough to hold the file's contents.
            var bytes = new byte[fs.Length];
            var bSuccess = false;

// Your unmanaged pointer.
            var pUnmanagedBytes = new IntPtr(0);
            var nLength = Convert.ToInt32(fs.Length);

// Read the contents of the file into the array.
            bytes = br.ReadBytes(nLength);
            // Allocate some unmanaged memory for those bytes.
            pUnmanagedBytes = Marshal.AllocCoTaskMem(nLength);
            // Copy the managed byte array into the unmanaged array.
            Marshal.Copy(bytes, 0, pUnmanagedBytes, nLength);
            // Send the unmanaged bytes to the printer.
            bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, nLength);
            // Free the unmanaged memory that you allocated earlier.
            Marshal.FreeCoTaskMem(pUnmanagedBytes);
            return bSuccess;
        }

public static bool SendBytesToPrinter(string szPrinterName, byte[] data)
        {
            var pUnmanagedBytes = Marshal.AllocCoTaskMem(data.Length); // Allocate unmanaged memory
            Marshal.Copy(data, 0, pUnmanagedBytes, data.Length); // copy bytes into unmanaged memory
            var retval = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, data.Length);
            Marshal.FreeCoTaskMem(pUnmanagedBytes); // Free the allocated unmanaged memory

return retval;
        }

public static bool SendStringToPrinter(string szPrinterName, string szString)
        {
            // How many characters are in the string?
            var dwCount = szString.Length;

// Assume that the printer is expecting ANSI text, and then convert
            // the string to ANSI text.
            var pBytes = Marshal.StringToCoTaskMemAnsi(szString);

// Send the converted ANSI string to the printer.
            var result = SendBytesToPrinter(szPrinterName, pBytes, dwCount);
            Marshal.FreeCoTaskMem(pBytes);

return result;
        }

//if you want a wrapper function for you strings :
        public static bool SendAsciiToPrinter(string szPrinterName, string data)
        {
            var retval = false;

//if  you are using UTF-8 and get wrong values in qrcode printing, you must use ASCII instead.
            //retval = SendBytesToPrinter(szPrinterName, Encoding.UTF8.GetBytes(data));
            retval = SendBytesToPrinter(szPrinterName, Encoding.ASCII.GetBytes(data));

return retval;
        }

#endregion
    }
}

void test(string szPrinterName, byte[] data)

{

RawPrinterHelper.SendBytesToPrinter(szPrinterName, data);

}

Pos58打印程序开发相关相关推荐

  1. 工具系列 | 使用Lodop进行WEB打印程序开发

    Lodop(标音:劳道谱,俗称:露肚皮)是专业WEB控件,用它既可裁剪输出页面内容,又可用程序代码直接实现 复杂打印.控件功能强大,却简单易用,所有调用如同JavaScript扩展语句. WEB套打可 ...

  2. 钉钉小程序开发相关资料

    1.H5接入钉钉小程序参考资料: https://developers.dingtalk.com/document/app/scheme-of-mini-programs tips: 企业内部应用可以 ...

  3. 「开发者说」车辆管理上钉钉,云上管车小程序开发分享

    本篇文章的供稿人为云上管车研发工程师刘奇云,内容主要为钉钉小程序开发相关,概览本文大概需要3分钟,精读本文需要10分钟 "随着经济社会数字化发展水平的提升,协同办公日趋常态化.云上管车通过与 ...

  4. 微信小程序开发工具最新版本已更新下载(1.02.1804120)

    下载地址: windows 64 . windows 32 . mac 本次更新修复信息如下: 1.修复 1.02.1804080 引入的编译条件为分包内页面时无法加载的问题 1. 更新到最新版本后 ...

  5. 智慧餐饮小程序开发解决方案

    数字化浪潮袭来让各类型的餐饮行业纷纷寻求转型和升级,但是餐饮数字化转型并没有那么简单,因为企业的数字化转型是对组织.营销等多方面的综合要求.一起来看看智慧餐饮小程序开发解决方案. 1. 扫码点餐 用户 ...

  6. js页面初始化方法只调用一次_跟我学 “Linux” 小程序 Web 版开发(三):云开发相关数据调用

    介绍 在完成了界面的实现后,接下来可以开始进行和云开发相关的数据对接.完成数据对接后,应用基础就打好了,接下来的就是发布上线以及一些小的功能的加入. 配置 在进行相关的配置调用的时候,你需要先登录腾讯 ...

  7. 餐厅小票打印模板_智慧餐厅多商家入驻小程序开发,成功案例:万足外卖!

    致读者:点击上方蓝色字 "太阳码说 " → 点击右上角" ... "→ 点选"设为星标 ★ " 加上星标,每天收到小程序最新资讯信息! 智慧 ...

  8. 微信小程序image组件开发程序以及相关图片问题参考资料汇总

    微信小程序image组件开发程序以及相关图片问题参考资料汇总,希望对大家小程序开发能有一定的参考和借鉴价值.以下汇总主要涉及到微信小程序image组件有关资源路径.缩放和剪裁模式等进行的探讨,无论是对 ...

  9. (Spring程序开发)简介程序开发步骤配置文件相关API

    1Spring简介 1.1 Spring是什么 Spring是分层的Java SE/EE应用full-stack 轻量级开源框架, 以IoC(Inverse Of Control:反转控制) 和**A ...

  10. linux一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书)

    一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书) --------------------------目录-网络无关篇-目录-------------------------- 0001 修 ...

最新文章

  1. 【作死】更新macOS Mojave后Vagrant无法使用
  2. 6000字,详解数据仓库明星产品背后的技术奥秘
  3. Qt Creator使用3D组件
  4. 有意思的 Node.js 内存泄漏问题
  5. python树莓派 是什么_用树莓派和Python给你的植物浇水
  6. 暴力删除文件(文件夹)之为所欲为
  7. asp 检测更改后缀的图片_微信不能发送25M以上视频?一键修改后缀名,就能立马发送...
  8. 中如何构造有参和无惨_导数中构造函数的神力你应该借助一下
  9. 始于CSDN,归于CSDN【一个七年老码农的心声】
  10. maven-聚合与继承
  11. java比较三个数的编程_java编程题,输入3个数abc按大小顺序输出
  12. 10000个虎年限定版红包封面!给!
  13. python3GUI--下载抖音小姐姐所有无水印视频(附源码)
  14. 对于ssl中的pem文件和key 文件的理解
  15. mysql 创建utf-8数据库_mysql 创建utf-8数据库
  16. P6974 [NEERC2015]Adjustment Office 题解
  17. Scala-scalaMap转JSON字符串和javaMap
  18. FFMPEG音频视频开发: 开发本地视频播放器(单线程解码)
  19. python连接mysql的几种方式_Python连接MySQL数据库的多种方式
  20. Mac安装Tableau Desktop 2019 for Mac中文版安装教程

热门文章

  1. JAVA前后端分离项目实战
  2. 可编程逻辑器件FPGA学习-VHDL
  3. 单片机仿真软件 linux,免费的单片机和电路仿真软件SimulIDE,从此再也不用花钱买开发板了...
  4. 人人接龙助手,三分钟为你的微信群创建打卡活动
  5. gabor matlab pudn,matlab-Face-recognition 基于Gabor特征提取和人工智能的人脸检测系统 271万源代码下载- www.pudn.com...
  6. 百度浏览器启动公司级内测 截图首度曝光
  7. 剧情系统实战,我们要做一个什么样的剧情系统
  8. ffmpeg 音频转amr
  9. Python求解拉普拉斯矩阵及其特征值
  10. vs mysql 开发erp_ERP vs MRP的区别