Pos58打印程序开发相关
打印机口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打印程序开发相关相关推荐
- 工具系列 | 使用Lodop进行WEB打印程序开发
Lodop(标音:劳道谱,俗称:露肚皮)是专业WEB控件,用它既可裁剪输出页面内容,又可用程序代码直接实现 复杂打印.控件功能强大,却简单易用,所有调用如同JavaScript扩展语句. WEB套打可 ...
- 钉钉小程序开发相关资料
1.H5接入钉钉小程序参考资料: https://developers.dingtalk.com/document/app/scheme-of-mini-programs tips: 企业内部应用可以 ...
- 「开发者说」车辆管理上钉钉,云上管车小程序开发分享
本篇文章的供稿人为云上管车研发工程师刘奇云,内容主要为钉钉小程序开发相关,概览本文大概需要3分钟,精读本文需要10分钟 "随着经济社会数字化发展水平的提升,协同办公日趋常态化.云上管车通过与 ...
- 微信小程序开发工具最新版本已更新下载(1.02.1804120)
下载地址: windows 64 . windows 32 . mac 本次更新修复信息如下: 1.修复 1.02.1804080 引入的编译条件为分包内页面时无法加载的问题 1. 更新到最新版本后 ...
- 智慧餐饮小程序开发解决方案
数字化浪潮袭来让各类型的餐饮行业纷纷寻求转型和升级,但是餐饮数字化转型并没有那么简单,因为企业的数字化转型是对组织.营销等多方面的综合要求.一起来看看智慧餐饮小程序开发解决方案. 1. 扫码点餐 用户 ...
- js页面初始化方法只调用一次_跟我学 “Linux” 小程序 Web 版开发(三):云开发相关数据调用
介绍 在完成了界面的实现后,接下来可以开始进行和云开发相关的数据对接.完成数据对接后,应用基础就打好了,接下来的就是发布上线以及一些小的功能的加入. 配置 在进行相关的配置调用的时候,你需要先登录腾讯 ...
- 餐厅小票打印模板_智慧餐厅多商家入驻小程序开发,成功案例:万足外卖!
致读者:点击上方蓝色字 "太阳码说 " → 点击右上角" ... "→ 点选"设为星标 ★ " 加上星标,每天收到小程序最新资讯信息! 智慧 ...
- 微信小程序image组件开发程序以及相关图片问题参考资料汇总
微信小程序image组件开发程序以及相关图片问题参考资料汇总,希望对大家小程序开发能有一定的参考和借鉴价值.以下汇总主要涉及到微信小程序image组件有关资源路径.缩放和剪裁模式等进行的探讨,无论是对 ...
- (Spring程序开发)简介程序开发步骤配置文件相关API
1Spring简介 1.1 Spring是什么 Spring是分层的Java SE/EE应用full-stack 轻量级开源框架, 以IoC(Inverse Of Control:反转控制) 和**A ...
- linux一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书)
一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书) --------------------------目录-网络无关篇-目录-------------------------- 0001 修 ...
最新文章
- 【作死】更新macOS Mojave后Vagrant无法使用
- 6000字,详解数据仓库明星产品背后的技术奥秘
- Qt Creator使用3D组件
- 有意思的 Node.js 内存泄漏问题
- python树莓派 是什么_用树莓派和Python给你的植物浇水
- 暴力删除文件(文件夹)之为所欲为
- asp 检测更改后缀的图片_微信不能发送25M以上视频?一键修改后缀名,就能立马发送...
- 中如何构造有参和无惨_导数中构造函数的神力你应该借助一下
- 始于CSDN,归于CSDN【一个七年老码农的心声】
- maven-聚合与继承
- java比较三个数的编程_java编程题,输入3个数abc按大小顺序输出
- 10000个虎年限定版红包封面!给!
- python3GUI--下载抖音小姐姐所有无水印视频(附源码)
- 对于ssl中的pem文件和key 文件的理解
- mysql 创建utf-8数据库_mysql 创建utf-8数据库
- P6974 [NEERC2015]Adjustment Office 题解
- Scala-scalaMap转JSON字符串和javaMap
- FFMPEG音频视频开发: 开发本地视频播放器(单线程解码)
- python连接mysql的几种方式_Python连接MySQL数据库的多种方式
- Mac安装Tableau Desktop 2019 for Mac中文版安装教程
热门文章
- JAVA前后端分离项目实战
- 可编程逻辑器件FPGA学习-VHDL
- 单片机仿真软件 linux,免费的单片机和电路仿真软件SimulIDE,从此再也不用花钱买开发板了...
- 人人接龙助手,三分钟为你的微信群创建打卡活动
- gabor matlab pudn,matlab-Face-recognition 基于Gabor特征提取和人工智能的人脸检测系统 271万源代码下载- www.pudn.com...
- 百度浏览器启动公司级内测 截图首度曝光
- 剧情系统实战,我们要做一个什么样的剧情系统
- ffmpeg 音频转amr
- Python求解拉普拉斯矩阵及其特征值
- vs mysql 开发erp_ERP vs MRP的区别