添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

转载的: https://blog.csdn.net/ghs79/article/details/46543845

\?\USB#VID_8866&PID_0100#0001B0000000#{a5dcbf10-6530-11d2-901f-00c04fb951ed}

USB小票打印解决办法
一、需要驱动,无需更改程序

 安装USB打印驱动,然后共享打印机,通过 “\\计算机\打印机名”的形式,按端口方式写。
 

二、直接写USB端口,无需驱动,但需要改程序。

 1、USB端口的形式如:\\?\usb#vid_0483&pid_5720#11101800002#{a5dcbf10-6530-11d2-901f-00c04fb951ed}。
     1.1、顺便说下:在我测试过程中,发现同一台小票打印机,在不同电脑上显示的端口名称是一样的。
     1.2、根据查的资料推断,同一型号的打印机名称应该是固定的(没有证实)。
 2、用串口与电脑通信,实现数据的发送。
     2.1、本人改了网上的SPcomm控件,以支持COM10以上的端口和USB端口。在CreateFile中产生影响。
 3、提供DEMO和控件源码。
    3.1、DEMO中可以检测USB打印机的名称:先打开程序,再插入USB打印机。
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

下载地址:http://download.csdn.net/detail/ghs79/8818157

利用标签设计软件做好模板,打印至本地文件,把其中的ZPL、EPL指令拷贝出来,替换其中动态变化的内容为变量名,做成一个模板文本,在代码中动态替换变量,再把指令输出至打印机。

windows下如何用cmd命令调用USB打印机打印

本以为这种命令应该很简单就能搜索到……实际上却花了好一会时间才查到,而且还是一个稍稍麻烦的方法

1.打印机

首先, 我是用的是usb打印机, 在使用前还要安装相应产品的驱动,正常鼠标操作打印时没有问题的

2.确认计算机的全名

此电脑->属性->高级系统设置->计算机名->计算机全名(等会的cmd命令要用) 
(由于系统的差异, 可能有些不一样,但总是能找到的)

3.将打印机设置为共享, 确认打印机共享名

设置->设备->打印机和扫描仪->打印机属性->共享->勾选共享这台打印机 
(还是那句话……由于系统的差异, 可能有些不一样,但总是能找到的) 
确认下打印机的共享名(等会的cmd命令要用)

print /d:\计算机全名\打印机共享名 文档 
如: 
print /d:\LAPTOP-SLG4Q8MV\DASCOM 1.txt 
print /d:\CAIPENG-PC\GP-L80180 123.txt

ESC_POS无驱动USB打印机

ESC_POS无驱动USB打印机 
下面的这个程序可以使用: 
https://download.csdn.net/download/xjkstar/7245239

你好,我手头有一个GP-L80180 打印机,我想在PC上 用VC编程 通过USB 控制这个打印机,你们给我发了一个《80开发包》, 
里面的 PosdllDemo_VC.exe 通过串口可以打印, 
但是通过USB口不可以打印,能不能提供一个通过USB打印的 演示工具,最好是C或者C++的,有源码的

使用Win32 API打印原始数据(强烈建议)。

这可是微软的方法啊,不用在系统添加任何文件,同时又能保证打印机的正常使用,所以强烈建议。
参照:http://support.microsoft.com/kb/138594
 

下载下来:rawprn.exe 
解压出来:rawprint 工程: 
这里写图片描述 
运行如下指令:

   RawPrint.exe GP-L80180 123.txt

GP-L80180 是打印机 共享出来的 名字 
输出:

Attempting to send file [123.txt] to printer [GP-L80180].
Data sent to printer.

123.txt中的内容为:

\x0D\x1B\x40
OK打印完成
\x1D\x56\x41\x00
  • 1
  • 2
  • 3

利用树莓派完成热敏打印机的无驱打印

https://blog.csdn.net/Fashionxu/article/details/9000761 
wget http://python-escpos.googlecode.com/files/python-escpos-1.0.tgz

Java 实现 POS 打印机无驱打印 
https://www.ibm.com/developerworks/cn/java/j-lo-pos/

sudo pip install python-escpos

不要驱动,简单粗暴的用树莓派驱动USB打印机 
https://blog.csdn.net/huayucong/article/details/53750463

参考代码:

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <windows.h>
#include <string>
#include <IOSTREAM>
#include <winioctl.h>
#include <setupapi.h>
#pragma comment(lib, "setupapi.lib")
using namespace std;
typedef struct DataInfo
    string Port;  //串口端口号
    int BawdRate;//波特率
    int DataBits;  //数据位
    char Parity;  //校验位
    int ReceiveBuffer;  //缓冲区
    int StopBits;//停止位
}PrintDevice;
// SetupDiGetInterfaceDeviceDetail所需要的输出长度,定义足够大
#define INTERFACE_DETAIL_SIZE    (1024)
//设备数量上限,假设16台上限
#define MAX_DEVICE 16
//USB类的GUID
const GUID USB_GUID = {0xa5dcbf10, 0x6530, 0x11d2, {0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xed}};
HANDLE hPort=NULL;  //句柄
//封装的打印函数
int WriteData(string meg);
//打印内容
bool OnWriteData(string meg, bool bBold = false, bool bDTall = false, bool bDWide = false, int nHAil = 1);
//链接设备
int InitPort(PrintDevice &device);
//参数初始化
void InitializeDevicePar(PrintDevice &device);
//找设备
int GetDevicePath(LPGUID lpGuid, LPTSTR* pszDevicePath);
int _tmain(int argc, _TCHAR* argv[])
//遍历USB设备,找到POS打印机路径
    int i, nDevice;
    char* szDevicePath[MAX_DEVICE];        // 设备路径
    // 分配需要的空间
    for (i = 0; i < MAX_DEVICE; i++)
        szDevicePath[i] = new char[256];
    // 取设备路径
    nDevice = GetDevicePath((LPGUID)&USB_GUID, szDevicePath);
//  GUID_CLASS_USB_DEVICE;
    i = 0;
    while (i < nDevice)
        PrintDevice device;
        InitializeDevicePar(device);  //初始化打印机参数
        device.Port = szDevicePath[i++];
        printf("device.Port = %s\n",device.Port.c_str());
        InitPort(device);  //初始化打印机端口
        string s;
打印头信息开始//
        OnWriteData("*****Now You See Me*****\n\n",true, true, true);
        OnWriteData("- - - - - - - - - - - - - - - -\n");
        OnWriteData("So You Want?\n",false, true);
        OnWriteData("- - - - - - - - - - - - - - - -\n");
        OnWriteData("这是一个基于ESC_POS打印机的USB无驱动打印Demo\n",true, true, true);
        OnWriteData("我找到了你的电脑上所有的USB打印机\n",true, true, true, 2);
        OnWriteData("然后给所有找到的打印机发送打印命令\n", true, true, true, 3);
        OnWriteData("* * * * * * * * * * * * * * * *\n");
        OnWriteData("OK打印完成\n\n",false, false, true, 2);
        s = "\x1D\x56\x41\x00";
        WriteData(s);
        CloseHandle(hPort);//关闭端口
 // 释放空间
    for (i = 0; i< MAX_DEVICE; i++)
        delete szDevicePath[i];
    return 0;
//初始化参数
void InitializeDevicePar(PrintDevice &device)
    device.Port="COM4";
    device.BawdRate=9600;
    device.DataBits=8;
    device.StopBits=ONESTOPBIT;
    device.Parity=NOPARITY;  //NONE
    device.ReceiveBuffer=256;
//链接打印机
int InitPort(PrintDevice &device)
    hPort = CreateFile(device.Port.c_str(), GENERIC_READ | GENERIC_WRITE,
        0, NULL, 
        OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL, NULL );
    if (hPort == INVALID_HANDLE_VALUE) 
    {   // 打开端口失败
        return false;
        printf("InitPort Hello\r\n");
        //设置端口缓冲
        SetupComm(hPort, 1024, 1024); 
        // 设定通讯端口超时参数
        COMMTIMEOUTS tmouts;
        tmouts.ReadIntervalTimeout = 100;
        tmouts.ReadTotalTimeoutMultiplier = 100;
        tmouts.ReadTotalTimeoutConstant = 100;
        tmouts.WriteTotalTimeoutConstant = 100;
        tmouts.WriteTotalTimeoutMultiplier = 100;
        SetCommTimeouts(hPort, &tmouts);
        //设定通讯端口通讯参数
        DCB dcb;
        BOOL bol = TRUE;
        //dcb.DCBlength = sizeof(dcb);
        bol=GetCommState(hPort, &dcb);
        dcb.BaudRate = device.BawdRate;
        dcb.ByteSize =device.DataBits;
        dcb.StopBits = device.StopBits;
        dcb.Parity = device.Parity;
        bol = SetCommState(hPort, &dcb); //配置串口
        // 清除通讯端口缓存
        PurgeComm(hPort, PURGE_TXCLEAR | PURGE_RXCLEAR | PURGE_TXABORT | PURGE_RXABORT);
        // 初始化重叠IO对象
        OVERLAPPED m_OverlappedRead;
        OVERLAPPED m_OverlappedWrite;
        HANDLE m_hStopCommEvent;
        HANDLE m_hDataReady;
        memset(&m_OverlappedRead, 0, sizeof(OVERLAPPED));
        m_OverlappedRead.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
        memset(&m_OverlappedWrite, 0, sizeof(OVERLAPPED));
        m_OverlappedWrite.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
        // 初始化事件对象
        m_hStopCommEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
        m_hDataReady = CreateEvent(NULL, FALSE, FALSE, NULL);
        //初始化打印ESC @
        DWORD iBytesLength;
        char chInitCode[] = "\x0D\x1B\x40";
        if (!WriteFile(hPort, chInitCode, (DWORD)3L, &iBytesLength, NULL))
            return false;
    return true;
int   WriteData(string meg)
    DWORD dwWrite;
    return WriteFile(hPort, meg.c_str(), (DWORD)meg.length(), &dwWrite, NULL);
//打印数据,meg打印字符串,bBold=true粗体,nZoom=2大一号字体, nHAil=2居中对齐,nHAil=3右对齐。部分打印机可能中文字体设置无效,请加上FS !命令设置中文字体。
bool OnWriteData(string meg, bool bBold, bool bDTall, bool bDWide, int nHAil)
    char s[120] = "";
    memset(s, 0, 120);
    long nMode = 0;
    DWORD iBytesLength;
    if (bBold)
        nMode += 8;
    if (bDTall)
        nMode += 16;
    if (bDWide)
        nMode += 32;
    if (nMode > 0)
        sprintf(s, "\x1B\x21%c", nMode);
        if (strlen(s) < 3)
            iBytesLength = 0;
            WriteFile(hPort, s, (DWORD)3L, &iBytesLength, NULL);
            WriteData(s);
    switch (nHAil)
    case 1:
        break;
    case 2:
        strcat(s, "\x1B\x61\x01");
        WriteData(s);
        break;
    case 3:
        strcat(s, "\x1B\x61\x02");
        WriteData(s);
        break;
    default:
        break;
    WriteData(meg);
    iBytesLength = 0;
    strcpy(s, "\x1B\x21\x00");
    WriteFile(hPort, s, (DWORD)3L, &iBytesLength, NULL);
    return true;
//获取CreateFile的USB端口号
// 根据GUID获得设备路径
// lpGuid: GUID指针
// pszDevicePath: 设备路径指针的指针,用于返回找到的路径
// 返回: 成功得到的设备路径个数,可能不止1个
int GetDevicePath(LPGUID lpGuid, LPTSTR* pszDevicePath)
    HDEVINFO hDevInfoSet;
    SP_DEVINFO_DATA spDevInfoData;
    SP_DEVICE_INTERFACE_DATA ifData;
    PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail;
    int nCount;
    int nTotle;
    BOOL bResult;
    char* strUSBPrint = "USB 打印支持";
    // 取得一个该GUID相关的设备信息集句柄
    hDevInfoSet = ::SetupDiGetClassDevs(lpGuid,     // class GUID 
        NULL,                    // 无关键字 
        NULL,                    // 不指定父窗口句柄 
        DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);    // 目前存在的设备
    // 失败...
    if (hDevInfoSet == INVALID_HANDLE_VALUE)
        return 0;
    // 申请设备接口数据空间
    pDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT, INTERFACE_DETAIL_SIZE);
    pDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
    nTotle = -1;
    nCount = 0;
    bResult = TRUE;
    // 设备序号=0,1,2... 逐一测试设备接口,到失败为止
    while (bResult)
        nTotle++;
        spDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
        // 枚举符合该GUID的设备接口
        bResult = ::SetupDiEnumDeviceInfo(
            hDevInfoSet,     // 设备信息集句柄
            (ULONG)nTotle,   // 设备信息集里的设备序号
            &spDevInfoData);        // 设备接口信息
        if (bResult)
            DWORD DataT ;
            TCHAR buf[MAX_PATH];
            DWORD nSize = 0;
            // get Friendly Name or Device Description
            if ( SetupDiGetDeviceRegistryProperty(hDevInfoSet, &spDevInfoData, 
                SPDRP_FRIENDLYNAME, &DataT, (PBYTE)buf, sizeof(buf), &nSize) ) {
            } else if ( SetupDiGetDeviceRegistryProperty(hDevInfoSet, &spDevInfoData, 
                SPDRP_DEVICEDESC, &DataT, (PBYTE)buf, sizeof(buf), &nSize) ) {
            } else {
                lstrcpy(buf, _T("Unknown"));
            //是否是要找的设备类型
            if (strcmp(buf, strUSBPrint) != 0)
                continue;
            ifData.cbSize = sizeof(ifData);
            // 枚舉符合該GUID的設備接口
            bResult = ::SetupDiEnumDeviceInterfaces(
                hDevInfoSet,     // 設備信息集句柄
                NULL,            // 不需額外的設備描述
                lpGuid,          // GUID
                (ULONG)nTotle,   // 設備信息集里的設備序號
                &ifData);        // 設備接口信息
            if (bResult)
                // 取得该设备接口的细节(设备路径)
                bResult = SetupDiGetInterfaceDeviceDetail(
                    hDevInfoSet,    // 设备信息集句柄
                    &ifData,        // 设备接口信息
                    pDetail,        // 设备接口细节(设备路径)
                    INTERFACE_DETAIL_SIZE,    // 输出缓冲区大小
                    NULL,           // 不需计算输出缓冲区大小(直接用设定值)
                    NULL);          // 不需额外的设备描述
                if (bResult)
                    // 复制设备路径到输出缓冲区
                    ::strcpy_s(pszDevicePath[nCount], 256,pDetail->DevicePath);  
                    // 调整计数值
                    nCount++;
    // 释放设备接口数据空间
    ::GlobalFree(pDetail);
    // 关闭设备信息集句柄
    ::SetupDiDestroyDeviceInfoList(hDevInfoSet);
    return nCount;
                    2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt;                                                    ...
#include &amp;amp;lt;windows.h&amp;amp;gt;
#include &amp;amp;lt;string&amp;amp;gt;
#include &amp;amp;lt;IOSTREAM&amp;amp;gt;
using namespace std;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
 * 设备打印工具类
				
最近公司给商户做的App 允许App把卖出的商品信息通过打印机 打印标签 所以了解了一下iOS 和 打印机 之间的交互 (Ps:用的不是UIPrinter 那个扫面打印机 发送信息打印的那个框架) 主要功能 打印 .中文. 数字. 二维码 1.连接打印机 连接打印机可以通过 网线 USB 蓝牙 或者WiFi . 我们用App肯定是通过WiFi或者蓝牙连接 至于蓝牙怎么连接 可以 看看前面...
热敏小票/标签打印机,使用ESC/POS指令打印,常用指令封装,适用于GBK编码 const PER_MM=8,//每毫米像素数 fontSize=12,//每字符像素数 gbk=require('./gbk'),//兼容中文的字符转换库,文末附链接 /*计算字符串长度(1个中文=2个字符)*/ charLen=str=>{ let width=0; for(let i=0;i<str.length;i++){ width+=gbk.isAscii(str.charCodeAt(
public static final byte ESC = 27;// 换码 public static final byte FS = 28;// 文本分隔符 public static final byte GS = 29;// 组分隔符 public static final byte DLE = 16;// 数据连接换码 public static final b
NET API调用小票打印是一种调用NET框架下的API接,利用该API实现小票打印的过程。在实现该过程中,需要注意以下几个方面: 1. API的选择:需要选择与小票打印机相匹配的API接才能完成打印过程。通常情况下,API接包含调用文本和命令的方法,用于输出打印指令和图形信息等。 2. 小票打印机设置:在使用API接前,需要对小票打印机进行设置。该设置包括纸张尺寸、字符集、字体、行距、命令模式等。可以通过API接中的设置方法进行设置。 3. 数据格式:在调用API接输出信息的时候,需要将输出数据按照小票打印机的格式进行排布,常见的格式有ESC/POS格式、TPCL格式、ZPL格式等。 4. 打印控制和状态检测:在打印过程中,需要实现打印控制和状态检测。例如,可以通过API接发送查询命令,获取打印机的状态信息。 总的来说,NET API调用小票打印需要考虑API的选择、小票打印机的设置、数据格式的转换以及打印控制和状态检测等方面,以确保打印过程的顺利完成。