java usb 无驱打印_Windows Usb 无驱动打印

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

USB小票打印解决办法

一、需要驱动,无需更改程序

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

二、直接写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

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

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

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

1.打印机

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

2.确认计算机的全名

此电脑->属性->高级系统设置->计算机名->计算机全名(等会的cmd命令要用)

(由于系统的差异, 可能有些不一样,但总是能找到的)

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

设置->设备->打印机和扫描仪->打印机属性->共享->勾选共享这台打印机

(还是那句话……由于系统的差异, 可能有些不一样,但总是能找到的)

确认下打印机的共享名(等会的cmd命令要用)

4.打印

print /d:\计算机全名\打印机共享名 文档

如:

print /d:\LAPTOP-SLG4Q8MV\DASCOM 1.txt

print /d:\CAIPENG-PC\GP-L80180 123.txt

ESC_POS无驱动USB打印机

你好,我手头有一个GP-L80180 打印机,我想在PC上 用VC编程 通过USB 控制这个打印机,你们给我发了一个《80开发包》,

里面的 PosdllDemo_VC.exe 通过串口可以打印,

但是通过USB口不可以打印,能不能提供一个通过USB打印的 演示工具,最好是C或者C++的,有源码的

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

这可是微软的方法啊,不用在系统添加任何文件,同时又能保证打印机的正常使用,所以强烈建议。

参照:http://support.microsoft.com/kb/1385941

2

下载下来:rawprn.exe

解压出来:rawprint 工程:

d2382d9bd3d496f54acc326c98e8ac08.png

运行如下指令:

RawPrint.exe GP-L80180 123.txt1

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

输出:

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

Data sent to printer.1

2

123.txt中的内容为:

\x0D\x1B\x40

OK打印完成 \x1D\x56\x41\x001

2

3

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

sudo pip install python-escpos

参考代码:

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include #include #include #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;

} else {

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);

} else 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;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

需要学习的东西列表

1.Python2.webservice3.requirejs4.idea5.webService6.redis7.doubble8.mongDB9.zookper 大数据学习曲线&#xff1a;课程一、大数据运维之Linux基础课程二、大数据开发核心技术-Hadoop 2.x从入门到精通课程三、大数据开发核心技术-大数据仓库Hive精讲课程四、大数据协作框架-S…

微信小程序 引用其他js里的方法

微信小程序中&#xff0c;在微信官方开发文档我们可以知道 小程序的目录结构 。 一个小程序页面由四个文件组成&#xff0c;一个小程序页面的四个文件具有相同路径与文件名&#xff0c;由此我们可知一个小程序页面对应着一个跟页面同名的js文件。可是当有些公共方法&#xff0…

集成JavaFX和Swing(修订版)

我刚刚完成了对使用Swing的应用程序组件的重写&#xff0c;现在正在使用JavaFX&#xff0c;最后得到了与更大的swing应用程序集成的JavaFX组件。 这是一个很大的应用程序&#xff0c;重写花了我一段时间&#xff0c;最后一切都很好&#xff0c;我很高兴自己做到了。 您可能想在…

C++内存模型

C内存模型 一文了解所有C内存的问题 AlexCool 目录 一 C内存模型 二 C对象内存模型 三 C程序运行内存空间模型 四 C栈内存空间模型 五 C堆内存空间模型 六 C内存问题及常用的解决方法 七 C程序内存性能测试 环境&#xff1a; uname -a Linux alexfeng 3.19.0-15-generic #…

java bag_Java - T---bag - 博客园

Java是一门面向对象编程语言&#xff0c;不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表&#xff0c;极好地实现了面向对象理论&#xff0c;…

IT服务(运维)管理实施的几个要点--序言

IT服务&#xff08;运维&#xff09;管理&#xff08;不是IT运维技术&#xff09;是IT行业当中相对比较“窄”的一个分支&#xff0c;通常只被金融、电信等大型数据中心的中高层管理人员所关注。但是根据笔者多年从事IT服务和服务管理的经验来看&#xff0c;IT服务并不是一件容…

HTML条件注释

前面的话 IE条件注释是微软从IE5开始就提供的一种非标准逻辑语句&#xff0c;作用是可以灵活的为不同IE版本浏览器导入不同html元素。很显然这种方法的最大好处就在于属于微软官方给出的兼容解决办法而且还能通过W3C的效验 识别IE 因为从IE10开始&#xff0c;IE浏览器已经不再支…

MongoDB主键是您的朋友

MongoDB集合中的所有文档都有一个主键&#xff0c;称为_id 。 该字段在插入后自动分配给文档&#xff0c;因此几乎不需要提供它。 _id字段的有趣之处在于它是基于时间的 。 也就是说&#xff0c;基础类型的_id &#xff0c;这是ObjectId &#xff0c;是一个12字节的BSON型 &…

java getqueue 0_Java Queue的使用

Queue 实现一个先进先出的队列获取队列长度&#xff1a;size()添加元素到队尾&#xff1a;boolean add(E e) /boolean offer(E e)获取队列头部元素并删除&#xff1a;E remove() / E poll()获取队列头部元素但不删除&#xff1a;E element() / E peek()当添加或获取元素失败时t…

1015. Reversible Primes (20)

生词以及在文中意思prime 素数1.java十进制转为N进制&#xff1a;Integer.toString(int i,int radix)//返回的是i的二进制表示&#xff0c;返回类型为String&#xff0c;但是负数不适用。 N进制转为十进制&#xff1a;Integer.parseInt(String s,int radix)//radix进制的s&…

PAT 乙级 1029 旧键盘

1029 旧键盘 分数 20 作者 CHEN, Yue 单位 浙江大学 旧键盘上坏了几个键&#xff0c;于是在敲一段文字的时候&#xff0c;对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字&#xff0c;请你列出肯定坏掉的那些键。 输入格式&#xff1a; 输入在 2 行中…

css之absolute

一、absolute和float有相同的特性&#xff0c;包裹性和破坏性 1、absolute和float的相似(看下面的demo&#xff0c;如果图片在左上角&#xff0c;那么用float和absolute都一样) 1 <!doctype html>2 <html>3 <head>4 <meta charset"utf-8">5…

Spring Data Solr教程:分页

在我的Spring Data Solr教程的较早部分中&#xff0c;我们实现了一个简单的搜索功能&#xff0c;该功能用于搜索待办事项的信息。 我们搜索功能的当前实现将所有搜索结果显示在一个页面中。 对于大多数现实生活中的应用程序而言&#xff0c;这不是可行的解决方案&#xff0c;因…

消息队列01

公司项目里面用到了这个rabbitmq&#xff0c;自己以前不熟悉&#xff0c;看了代码里面的应用&#xff0c;自己也准备试着搭建下。 可以参照其他博主的这篇优秀博文&#xff1a; https://www.cnblogs.com/chengpeng15/p/5814197.html 一 前期需要了解的概念 1.什么是异步&#x…

java instanceof翻译_Java 中的instanceof简单讲解

Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出&#xff0c;这个对象是否是这个特定类或者是它的子类的一个实例。用法&#xff1a;result object instanceof class参数&#xff1a;Result&#xff1a;布尔类型…

Spring4有条件

Spring 4引入了一个称为Conditional的新功能&#xff0c;该功能针对于生成bean的Spring组件&#xff0c;并注视这些bean的生成&#xff0c;实质上&#xff0c;它提供了一种条件生成bean的方法。 考虑一个简单的例子&#xff1a; 我有一个名为“ CustomerService”的服务&…

inline「一」:从 image 底部白边初识 line-height

本文首发于个人博客 http://www.lijundong.com/image-and-line-height/ 今天在做一个静态页面时&#xff0c;图片底部出现一条 3px 高度的白边&#xff0c;既不是 margin 也不是 padding&#xff0c;找了好久没能解决&#xff0c;后来才发现与 line-height 相关&#xff0c;问…

(转) STM32--ADC

原标题&#xff1a;STM32之ADC步骤小技巧&#xff08;英文&#xff09; 看到标题&#xff0c;别吓到哈、并不是要用英文写、至于原因是什么、请往下看&#xff1a; 言归正传&#xff1a;STM32的ADC模块的特色 1、1MHz转换速率、12位转换结果&#xff08;12位、记住这个12位哈、…

java resultset 映射到实例_[Java]ResultSet的用法与实例

JDBC API 2.0/3.0中ResultSet记录集的简便实用的新特性1 新定义了若干个常数这些常数用于指定ResultSet 的类型游标移动的方向等性质&#xff0c;如下所示&#xff1a;public static final int FETCH_FORWARD; 该常数的作用是指定处理记录集中行的顺序&#xff0c;是由前到后即…

嗨,那里有回调!

因为是我的书包&#xff0c;所以我喜欢JavaScript 。 实际上&#xff0c;我已经开始喜欢JavaScritp的面向异步回调的编程风格 。 因此&#xff0c;当我发现自己处于非JavaScript环境中时&#xff08;例如Java&#xff09; &#xff0c;我往往会错过使用回调的机会。 好消息是…