資源簡介
針式打印機驅動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個文件信息
評論
共有 條評論