\?\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打印机。12345678910111213??下载地址:http://download.csdn.net/detail/ghs79/8818157利用标签设计软件做好模板,打印至本地文件,把其中的ZPL、EPL指令拷贝出来,替换其中动态变化的内容为变量名,做成一个模板文本,在代码中动态替换变量,再把指令输出至打印机。windows下如何用cmd命令调用USB打印机打印本以为这种命令应该很简单就能搜索到……实际上却花了好一会时间才查到,而且还是一个稍稍麻烦的方法1.打印机首先, 我是用的是usb打印机, 在使用前还要安装相应产品的驱动,正常鼠标操作打印时没有问题的2.确认计算机的全名此电脑->属性->高级系统设置->计算机名->计算机全名(等会的cmd命令要用)(由于系统的差异, 可能有些不一样,但总是能找到的)3.将打印机设置为共享, 确认打印机共享名设置->设备->打印机和扫描仪->打印机属性->共享->勾选共享这台打印机(还是那句话……由于系统的差异, 可能有些不一样,但总是能找到的)确认下打印机的共享名(等会的cmd命令要用)4.打印print /d:\计算机全名\打印机共享名 文档如:print /d:\LAPTOP-SLG4Q8MV\DASCOM 1.txtprint /d:\CAIPENG-PC\GP-L80180 123.txtESC_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/13859412下载下来:rawprn.exe解压出来:rawprint 工程:运行如下指令: RawPrint.exe GP-L80180 123.txt1GP-L80180 是打印机 共享出来的 名字输出:Attempting to send file [123.txt] to printer [GP-L80180].Data sent to printer.12123.txt中的内容为:\x0D\x1B\x40OK打印完成 \x1D\x56\x41\x00123利用树莓派完成热敏打印机的无驱打印https://blog.csdn.net/Fashionxu/article/details/9000761wget http://python-escpos.googlecode.com/files/python-escpos-1.0.tgzJava 实现 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 #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 new char[256]; } // 取设备路径 nDevice = GetDevicePath((LPGUID)&USB_GUID, szDevicePath); // GUID_CLASS_USB_DEVICE; ////////////////////////////////////////////////////////////////////////////////////////////////// i = 0; while (i //初始化打印机参数 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; ireturn 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;}
10-03 18:24