VC开发打印机相关API
来源:互联网 发布:算法工程师需要哪些知识 编辑:程序博客网 时间:2024/05/25 23:59
遍历当前PC机中已有打印机, 使用EnumPrinter() API可完成
DWORD dwFlag = PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS;
PRINTER_INFO_4* pPrinterInfo = NULL;
DWORD dwNeed = 0;
DWORD dwReturn = 0;
while( !EnumPrinters( dwFlag, NULL, 4, (LPBYTE)pPrinterInfo, dwNeed, &dwNeed, &dwReturn ) )
{
DWORD dwErr = GetLastError();
if( dwErr == ERROR_INSUFFICIENT_BUFFER )
{
if( pPrinterInfo )
{
LocalFree( pPrinterInfo );
}
pPrinterInfo = ( PRINTER_INFO_4* )LocalAlloc( LPTR, dwNeed );
}
else
{
break;
}
}
for( int i = 0; i < (int)dwReturn; i++ )
{
// 打印机名
m_lstPrinter.push_back( pPrinterInfo[i].pPrinterName );
}
if( pPrinterInfo )
{
LocalFree( pPrinterInfo );
}
枚举打印机纸张尺寸, 使用DeviceCapabilities()查询, DC_PAPERNAMES参数是用来查询用来显示的纸张名称, DC_PAPERSIZE是用来参询具体纸张尺寸, 单位0.1MM.
UINT iBuffSize = DeviceCapabilities( m_strDevName.c_str(), NULL, DC_PAPERNAMES, NULL, NULL );
if( iBuffSize > 0 )
{
char szPaperNameList[32][64];
UINT iFlag = DeviceCapabilities( m_strDevName.c_str(), NULL, DC_PAPERNAMES, (LPSTR)szPaperNameList, NULL );
if( iFlag != -1 )
{
for( int i = 0; i < iBuffSize; i++ )
{
m_vecPaperName.push_back( szPaperNameList[i] );
}
}
}
iBuffSize = DeviceCapabilities( m_strDevName.c_str(), NULL, DC_PAPERSIZE, NULL, NULL );
if( iBuffSize > 0 )
{
POINT arrPaperSize[32];
memset( arrPaperSize, 0, 32 * sizeof( POINT ) );
UINT iFlag = DeviceCapabilities( m_strDevName.c_str(), NULL, DC_PAPERSIZE, (LPSTR)arrPaperSize, NULL );
if( iFlag != -1 )
{
for( int i = 0; i < iBuffSize; i++ )
{
m_vecPaperSize.push_back( arrPaperSize[i] );
}
}
}
// 创建打印DC
m_hPrinterDC = ::CreateDC( NULL, strDevName.c_str(), NULL, NULL );
// 设置当前打印纸张尺寸
PRINTDLG printInfoDlg;
ZeroMemory( &printInfoDlg, sizeof( PRINTDLG ) );
printInfoDlg.lStructSize = sizeof( PRINTDLG );
printInfoDlg.hwndOwner = hWnd;
printInfoDlg.hDevMode = 0;
printInfoDlg.hDevNames = 0;
printInfoDlg.nCopies = 1;
printInfoDlg.nFromPage = 0xFFFF;
printInfoDlg.nToPage = 0xFFFF;
printInfoDlg.nMinPage = 1;
printInfoDlg.nMinPage = 0xFFFF;
printInfoDlg.Flags = PD_RETURNDC | PD_USEDEVMODECOPIESANDCOLLATE;
// 读取默认打印机参数
if( PrintDlg( &printInfoDlg ) )
{
//if( !GetDeviceCaps( printInfoDlg.hDC, RASTERCAPS ) & RC_STRETCHDIB )
//{
// 这里可以用来检查当前的打印设备是否可以支持一些绘制函数, 详细查MSDN
//}
DeleteDC( printInfoDlg.hDC );
}
LPDEVMODE lpDevMode = (LPDEVMODE)::GlobalLock( printInfoDlg.hDevMode );
if( lpDevMode )
{
lpDevMode->dmPaperSize = DMPAPER_A6; // 系统默认尺寸 A6 ( 4 * 6 英寸 )
DMPAPER_USER; // 自定义尺寸
lpDevMode->dmPaperWidth = 1048; // 自定义才需要设定
lpDevMode->dmPaperLength = 1560; // 自定义才需要设定
lpDevMode->dmOrientation = nOrient;
lpDevMode->dmCopies = nCopies;
lpDevMode->dmFields |= DM_PAPERSIZE | DM_PAPERWIDTH | DM_PAPERLENGTH | DM_ORIENTATION | DM_COPIES;
}
GlobalUnlock( printInfoDlg.hDevMode );
ResetDC( hDC, printInfoDlg.hDevMode ); // 把相关参数设置给当前打印DC
还有很多细节查看MSDN文档
- VC开发打印机相关API
- windows VC USB开发相关的api说明
- 打印机API
- 打印机相关
- Internet相关开发(VC)
- vc开发相关工具收集
- Android GPS 开发相关API
- VC 输出打印机
- API连接打印机
- win32 打印机api
- c# 打印机相关
- 打印机相关设置
- 打印机相关命令
- 热敏打印机相关资讯
- 根据打印机名获取打印机相关参数
- VC开发lua嵌入脚本语言相关问题
- VC进程相关的学习(四)(API截获)
- 46.VC(custom)-windows路径操作相关API函数
- unix 常用命令
- 淘宝开店方法流程,如何尽快赚钱
- 构建WCF RESTful service示例
- 《windows核心编程系列》十八谈谈windows钩子
- iphone 模仿百度输入框提示
- VC开发打印机相关API
- 实现类似UC浏览器的菜单
- 身心俱疲
- 网络流基础
- hdu 1165 Eddy's research II
- oracle字符串分割和提取
- 国际化
- Nginx源码分析-事件循环
- 使用heritrix抓取特定页面