资源简介
针式打印机驱动dll,通过pid,vid找到打印机的句柄,
用CreateFile,WriteFile发指令
可实现的套打等功能
代码片段和文件信息
#include “PrintDll.h“
#include
#include
#include //CString要用到的头文件
#pragma comment(lib “Setupapi.lib“)
//如果PidVid相同的话,就返回1,否则返回0
//
bool beSamePidVid(CString strPath CString strPidVid)
{
int flag = strPath.Find(strPidVid);
if (flag < 0)
{
return false;
}
else
{
return true;
}
}
//
//初始化得到打印机的句柄
//
HANDLE GetPrintHandle()
{
HANDLE hCom;//初始化成功返回句柄
CString strShow;
CString strtmp;
CString strPath;
//定义USB的GUID,具体GUID在哪个头文件里,还不知道
static GUID GUID_DEVINTERFACE_USB_DEVICE =
{0xA5DCBF10L 0x6530 0x11D2 0x90 0x1F 0x00 0xC0 0x4F 0xB9 0x51 0xED};
// 准备查找符合HID规范的USB设备
HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_USB_DEVICENULLNULL
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
// 枚举查找所有可用的USB设备接口,并找到vid_06BCpid_02F2的特定的USB设备(OKI5500F+)
for (int Device_Index=0;;Device_Index++)
{
SP_DEVICE_INTERFACE_DATA strtInterfaceData;
strtInterfaceData.cbSize = sizeof (SP_DEVICE_INTERFACE_DATA);
BOOL bSuccess = SetupDiEnumDeviceInterfaces(hDevInfoNULL&GUID_DEVINTERFACE_USB_DEVICE
Device_Index//找到的可用的设备索引号
&strtInterfaceData);
if (!bSuccess)
{
if (ERROR_NO_MORE_ITEMS == GetLastError())
{
break;
}
}
//第一次调用SetupDiGetDeviceInterfaceDetail 设置第三参数为NULL , 以获得长度(参数5)
DWORD returnsize = 0;
DWORD predictedLength = 0;
SetupDiGetDeviceInterfaceDetail(hDevInfo&strtInterfaceData
NULL0&returnsizeNULL);
predictedLength = returnsize;
//第二次调用SetupDiGetDeviceInterfaceDetail ,
// 若找到了设备,则读取设备路径名
SP_DEVICE_INTERFACE_DETAIL_DATA* pDetailData = NULL;
pDetailData = (PSP_INTERFACE_DEVICE_DETAIL_DATA) malloc (predictedLength);
pDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
if (!SetupDiGetDeviceInterfaceDetail(hDevInfo&strtInterfaceData
pDetailDatareturnsize&returnsizeNULL))
{
MessageBox(NULL _T(“查找设备路径时出错!“) _T(“错误“) 0);
SetupDiDestroyDeviceInfoList(hDevInfo);
return INVALID_HANDLE_VALUE ;
}
// 找到了设备路径
strPath = pDetailData->DevicePath;
//找特定的pid,vid
if (beSamePidVid(strPath _T(“vid_06bc&pid_02f2“)))
{
break;
}
}
// 用API函数CreateFile与设备通信
hCom = CreateFile(strPathGENERIC_WRITE
NULLNULLCREATE_ALWAYSFILE_ATTRIBUTE_NORMALNULL);
if (hCom == INVALID_HANDLE_VALUE)
{
MessageBox(NULL _T(“无法打开通信端口“) _T(“错误“) 0);
SetupDiDestroyDeviceInfoList(hDevInfo);
return INVALID_HANDLE_VALUE;
}
return hCom;
}
//
//释放句柄
//
void ReleaseHandle(HANDLE hCom)
{
::CloseHandle(hCom);
}
//
//设置相对于当前位置的打印位置
//
void OffSetPosXY(HANDLE hCom int x int y)//单位1/60英寸
{
unsigned long cnt = 0;
//先处理Y坐标,在X坐标
char YPos[3] = {0x1B 0x4A 0x00};
int LineNum = 0; //需要换多少个85/60英寸 //整步
int LineRem = 0; //需要换多少个1/60英寸 //小碎步
y = y * 3;
//如果当前换行数超过255(单位1/180英寸),则需要两次或多次换行
if (y > 255)
{
LineNum = y / 255;
LineRem = y % 255;
}
else//没超
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8385 2014-01-24 13:50 PrintDll\PrintDll.cpp
文件 1765 2014-01-24 13:37 PrintDll\PrintDll.h
文件 1345 2014-01-24 11:47 PrintDll\PrintDll.sln
..A..H. 15360 2014-01-26 13:32 PrintDll\PrintDll.suo
文件 3300 2014-01-06 11:07 PrintDll\PrintDll.vcxproj
文件 1067 2014-01-06 11:03 PrintDll\PrintDll.vcxproj.filters
文件 143 2014-01-06 11:02 PrintDll\PrintDll.vcxproj.user
文件 93696 2014-01-24 13:50 TestDll\PrintDll.dll
文件 4256 2014-01-24 13:50 TestDll\PrintDll.lib
文件 3013 2014-01-24 11:45 TestDll\ReadMe.txt
....... 67777 2009-08-31 02:31 TestDll\res\TestDll.ico
文件 670 2014-01-24 11:45 TestDll\res\TestDll.rc2
文件 2096 2014-01-24 13:47 TestDll\resource.h
文件 140 2014-01-24 11:45 TestDll\stdafx.cpp
文件 1652 2014-01-24 11:51 TestDll\stdafx.h
文件 234 2014-01-24 11:45 TestDll\targetver.h
文件 106032 2014-01-24 13:47 TestDll\TestDll.aps
文件 2006 2014-01-24 11:45 TestDll\TestDll.cpp
文件 448 2014-01-24 11:45 TestDll\TestDll.h
文件 10934 2014-01-24 13:47 TestDll\TestDll.rc
文件 5990 2014-01-24 12:04 TestDll\TestDll.vcxproj
文件 1988 2014-01-24 11:45 TestDll\TestDll.vcxproj.filters
文件 143 2014-01-24 11:45 TestDll\TestDll.vcxproj.user
文件 4797 2014-01-24 13:47 TestDll\TestDllDlg.cpp
文件 889 2014-01-24 13:47 TestDll\TestDllDlg.h
目录 0 2014-01-26 14:55 PrintDll\Debug
目录 0 2014-01-26 14:55 TestDll\Debug
目录 0 2014-01-24 11:45 TestDll\res
目录 0 2014-01-26 14:55 PrintDll
目录 0 2014-01-24 13:47 TestDll
............此处省略3个文件信息
相关资源
- R语言实现ARFIMA,源码和dll文件
- 获取和设置磁盘驱动器卷标名称
- STM32的12864驱动程序(免积分)
- api-ms-win-*.dll 64位
- XR21x141x-XP2KVista7-DriversOnly-Vers1.9.0.0XR
- USB转串口驱动源代码及单片机程序
- GnuWin32 SSL lib libeay32.dll和libssl32.dll
- MarkEzd.dll的使用
- VC Kodak图像控件的dll
- ResHacker.exe
- api-ms-win-core-heap-l2-1-0.dll 64位
- cudart64_92.dll
- 内核注入DLL
- commview.dll、cygwin1.dll及ca2k.dll文件
- asus b85plus e3 1231v3 rx470/570 clover config(
- 炜煌打印机USB驱动For Win7
- ISTask.dll
- AES加密算法Dll
- Arduino uno 控制42步进电机TB6560驱动模块
- USB线转RS232串口驱动
- libeay32.dll 、 ssleay32.dll动态链接库
- VC 2015 x86 绿色DLL包
- 驱动用MiniFilter来隐藏指定类型的文件
- IMX385驱动
- Windows7 64位MSVCRTD.DLL
- TPerlRegEx V7.9(去除了pcrelib.dll的限制)
- 九阵官方加密狗驱动驱动后认狗
- TDI驱动源代码
- LA1016软件+驱动的使用说明.pdf
- 系统图标大全,dll文件
评论
共有 条评论