手头有一个佳博 GP-L80180 热敏打印机,该打印机有USB口 ,串口。
给的例子,串口通了,通过USB口,安装驱动之后,也可以打印测试页。
但是用VC程序 通过系统驱动打印的方式 ,不是很熟悉。
参考 ESPON 的一些例程,直接通过USB接口,发送ESCPOS指令给打印机。
下面是开发的过程的记录。

1.通过USB线 连接到PC,我的系统是win7 64位。
在设备管理器里面,

如果PC系统是英文版的,应该是叫另外一个名字:USB PRINTING SUPPORT,这个地方不确定。

使用BUS HOUND 查看打印机 USB接口

通过其他网友提供的工具,得到其GUID:

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

下面开始第一步,对该USB设备进行枚举,首先找到这个设备,然后再打开。

使用vs2013 创建一个 win32 console 控制台工程:命名为GPL80_ESCPOS_USB

默认使用的字符集为:使用 Unicode 字符集

代码如下:

// GPL80_ESCPOS_USB.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;// 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 } };int GetDevicePath(LPGUID lpGuid, LPTSTR* pszDevicePath);////////////////////////////////////////////////////////////////////////////////////////////////////////
//获取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;TCHAR* strUSBPrint = TEXT("USB 打印支持");// 取得一个该GUID相关的设备信息集句柄hDevInfoSet = ::SetupDiGetClassDevs(lpGuid,     // class GUID NULL,                    // 无关键字 NULL,                    // 不指定父窗口句柄 DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);    // 目前存在的设备// 失败...if (hDevInfoSet == INVALID_HANDLE_VALUE){printf("failed \r\n");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 Descriptionif (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"));}_tprintf(_T("buf = %s \r\n"), buf);//是否是要找的设备类型if (_tcscmp(buf, strUSBPrint) != 0)continue;_tprintf(_T("OK\r\n"));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){// 复制设备路径到输出缓冲区::_tcscpy_s(pszDevicePath[nCount],256, pDetail->DevicePath);// 调整计数值nCount++;_tprintf(_T("Cnt = %d,pDetail->DevicePath =%s\r\n"), nCount, pDetail->DevicePath);}}}}// 释放设备接口数据空间::GlobalFree(pDetail);// 关闭设备信息集句柄::SetupDiDestroyDeviceInfoList(hDevInfoSet);return nCount;
}HANDLE hPort = NULL;  //句柄int   WriteData(string meg)
{DWORD dwWrite;return WriteFile(hPort, meg.c_str(), (DWORD)meg.length(), &dwWrite, NULL);
}int _tmain(int argc, _TCHAR* argv[])
{//遍历USB设备,找到POS打印机路径int i, nDevice;TCHAR * szDevicePath[MAX_DEVICE];        // 设备路径//  string Port;  //串口端口号setlocale(LC_CTYPE, "chs");//设置中文字符TCHAR * Port;// 分配需要的空间for (i = 0; i < MAX_DEVICE; i++){szDevicePath[i] = new TCHAR[256];}// 取设备路径nDevice = GetDevicePath((LPGUID)&USB_GUID, szDevicePath);i = 0;while (i < nDevice){Port = szDevicePath[i++];_tprintf(_T("device.Port = %s\n"), Port);}hPort = CreateFile(Port, GENERIC_READ | GENERIC_WRITE,0, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);if (hPort == INVALID_HANDLE_VALUE){   // 打开端口失败return false;}DWORD iBytesLength;char chInitCode[] = "\x0D\x1B\x40";if (!WriteFile(hPort, chInitCode, (DWORD)3L, &iBytesLength, NULL)){_tprintf(_T("Write File Error\r\n"));return 0;}string s;s = "OK打印完成\n\n";WriteData(s);s = "1233333\n\n";WriteData(s);s = "abc\n\n";WriteData(s);s = "cbde\n\n";WriteData(s);s = "\x1D\x56\x41\x00";WriteData(s);getchar();return 0;
}

输出:

buf = USB Serial Converter
buf = USB 输入设备
buf = USB 打印支持
OK
Cnt = 1,pDetail->DevicePath =\\?\usb#vid_8866&pid_0100#0001b0000000#{a5dcbf10-65
30-11d2-901f-00c04fb951ed}
device.Port = \\?\usb#vid_8866&pid_0100#0001b0000000#{a5dcbf10-6530-11d2-901f-00
c04fb951ed}

开发中遇到的问题:
1. win32 的VC 控制台窗口如何输出中文 ? setlocale(LC_CTYPE, “chs”);//设置中文字符
2. TCHAR 语句 如何输出log ? _tprintf(_T(“abc”));

打印效果:

完整的项目工程附件如下,使用的是vs2013 ,修改一下,用其他的版本,应该也可以打开。
https://download.csdn.net/download/wowocpp/10488085

欢迎交流指导

佳博 GP-L80180 USB ESCPOS VC 开发相关推荐

  1. 佳博80系列打印机驱动开发DLL支持C#的过程

    最近小编的公司需要使用到佳博的打印机进行一系列的打印开发以及智能驱动,所以小编联系了佳博的官方客服,然后找到的他们的官方SDK开发包,进行开发,由于小编使用的是.net平台的C#语言,而官方的开发包里 ...

  2. 佳博 热敏打印机 ESCPOS 指令研究

    Test.txt内容: 参考打印到文档功能: 初识打印机驱动 http://www.cnblogs.com/MrDing/p/4078189.html 热敏打印头打印原理和C实现黑白位图的放大 htt ...

  3. Android接入热敏打印机,Android 关于佳博和汉印蓝牙热敏打印机开发

    接上篇文章Android之BLE(低功耗)蓝牙开发,本篇文章针对上篇博文中提出的两款打印机的开发流程进行记录. 首先不管时佳博打印机还是汉印打印机,都是先对他们各自的lib进行导入,如图: 导入lib ...

  4. android 开发 佳博打印模板_电商在打印快递电子面单时的常见问题及解决方法

    电商经营流程中有发货这一环节,而发货时需要在外包装上面贴一张标签.这张标签就是用电子面单打印机打印出来的,那么打印机工作过程中,出现设置问题或小故障怎么办?佳博打印机小编在这里总结了一些电子面单打印机 ...

  5. Android 关于佳博和汉印蓝牙热敏打印机开发

    接上篇文章Android之BLE(低功耗)蓝牙开发,本篇文章针对上篇博文中提出的两款打印机的开发流程进行记录. 首先不管时佳博打印机还是汉印打印机,都是先对他们各自的lib进行导入,如图: 导入lib ...

  6. 佳博/芯桦打票机对接(含USB和网口)

    佳博/芯桦打票机对接(含USB和网口) 记录一下最近实现的一个需求,用PHP远程连接芯桦.佳博打票机,代码还未进行优化,基本功能已经实现打印,具体打印指令需要查看佳博/芯桦的打票机指令,USB口打印质 ...

  7. 佳博 TSC打印机 TSPL指令开发

    如何在电脑上使用C# 调用佳博 TSC打印机指令控制打印 踩了不少坑 跟大家分享下开发需要注意的地方 1. 佳博和TSC的 BARCODE 指令有出入,TSC多了一个参数,直接用佳博的打印是扫码不出二 ...

  8. android通过USB连接佳博80打印机

    GitHub项目地址 条件:1安卓主板上有USB口,2,rom内置了打印驱动 不行就用其他方式或者换主板吧(本人当初使用的工控主板坑得不要不要的) 本文介绍的是使用USB方式 佳博提供两个函数打印 1 ...

  9. USB热敏打印机(佳博)

    最近公司对接好多打印机,最后找到佳博.对接的时候有很多的坑,在没有技术对接的情况下我只能一个一个坑的探 首先有必要讲明一下必须完成和注重的地方 准备工作(必要) 主要是文档上说的,看文档真的很有必要. ...

最新文章

  1. python-opencv 形态学
  2. 进程控制概念简介 多线程上篇(三)
  3. (翻译)Quartz官方教程——第七课:TriggerListeners 和 JobListeners
  4. 火影忍者手游服务器维护4月4,火影忍者手游4月14日联服公告-火影忍者手游4月14日联服时间_牛游戏网...
  5. 科普丨关灯玩手机,危害到底有多大?如何科学用眼?
  6. oracle计算1到一百偶数的和,Perl 打印在1..100内所有偶数和奇数
  7. CentOS 7操作系统中设置系统时间/时区的方法
  8. 解决iTnues对PC授权,连接不上iTnues的问题
  9. 使用db1小波做3层小波分解
  10. bandzip屏蔽广告
  11. 爱分享 IE地址栏显示空白?360电脑救援巧修复
  12. Wox + Everything = 效率神器(附下载链接)
  13. python学习之初窥门径
  14. Python代码实现md5加密
  15. intelx86为何从0xFFFF0处执行
  16. Spring-Boot Dubbo 整合
  17. java学习个人总结_Java学习的总结
  18. 百度通用文字识别——识别验证码
  19. python怎么解题_农夫过河问题 Python实现解题
  20. Redis 全实践(超长文预警)

热门文章

  1. 常用设计模式——职责链模式
  2. 鼎信通达网关云服务器注册,鼎信通达语音网关 | FreePBX-世界上最大的企业IPPBX开源项目, 支持SIP,PSTN,分机呼叫,队列,电话录音,振铃组等...
  3. C# 使用VS 性能探查器(快捷键:Alt+F2)
  4. 信息安全保障人员(CISAW)安全集成方向
  5. 用AI赋能客服,灵声科技获数千万元A轮融资
  6. dataStructure_外部排序/多路归并/败者树/最佳归并树
  7. 深入浅出TensorFlow2函数——tf.data.Dataset.batch
  8. php获取页面视频文件,PHP获取各大视频网站页面中的Flash播放地址
  9. 在发送邮件的时候出现《命令顺序不正确。 服务器响应为:Error: need EHLO and AUTH first !》解决方案
  10. 空当接龙纸牌生成算法