VC++访问打印机

本文详细介绍了如何使用Windows API进行打印管理,包括获取默认打印机、设置默认打印机以及遍历所有打印机的方法。通过代码示例展示了GetDefaultPrinter、SetDefaultPrinter和EnumPrinters函数的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//遍历电脑的打印机
#include <WinSpool.h>  
#pragma comment(lib, "Winspool.lib")

 

得到电脑的默认打印机、设置默认打印机、遍历电脑打印机GetDefaultPrinter,SetDefaultPrinter,EnumPrinters。

得到电脑的默认打印机:

   TCHAR szBuffer[1024]={0};

   DWORD length = 1024;

    intret = ::GetDefaultPrinter(szBuffer,&length);

    if(ret== FALSE)

       ret = ::GetLastError();

    else

    {

       SetDlgItemText(IDC_EDIT1,szBuffer);

       return;

    }

    if(ret == ERROR_INSUFFICIENT_BUFFER)

    {

       CString temp;

       temp.Format(_T("%d"),length);

       AfxMessageBox(CString(_T("ERROR_INSUFFICIENT_BUFFER"))+_T("the real size is ")+temp);

    }

    elseif(ret == ERROR_FILE_NOT_FOUND)

       AfxMessageBox(_T("ERROR_FILE_NOT_FOUND"));

    else

    {

       CString strRet;

       strRet.Format(_T("%d"),ret);

       AfxMessageBox(strRet);

    }

 

设置电脑默认打印机:

   TCHAR szPrinterName[1024]={0};

   GetDlgItemText(IDC_EDIT2,szPrinterName,1024);

   BOOL ret = FALSE;

   ret = SetDefaultPrinter(szPrinterName);

    if(ret== FALSE)

       AfxMessageBox(_T("设置默认打印机失败"));

    else

        AfxMessageBox(_T("设置默认打印机成功"));

 

遍历电脑中的打印机:

DWORD Flags = PRINTER_ENUM_FAVORITE |PRINTER_ENUM_LOCAL;

   DWORD cbBuf;

   DWORD pcReturned ;

   CString str;

 

   DWORD Level = 2;

   TCHAR Name[500]={0} ;

    ::EnumPrinters(Flags, Name,Level, NULL, 0, &cbBuf, &pcReturned) ;

    constLPPRINTER_INFO_2 pPrinterEnum = (LPPRINTER_INFO_2)LocalAlloc(LPTR, cbBuf + 4) ;

    if(!pPrinterEnum)

    {

       str.Format(L"error is %d",GetLastError());

       MessageBox(str,0,0);

    }

    if(!EnumPrinters( Flags, Name,Level,(LPBYTE)pPrinterEnum,cbBuf,&cbBuf,&pcReturned))

    {

       str.Format(L"error is %d",::GetLastError());

       MessageBox(str,0,0);

       return ;

    }

   CString temp;

   temp.Format(_T("有几个数组元素%d"),pcReturned);

    AfxMessageBox(temp);

    for(unsignedint i=0;i<pcReturned;i++)

    {

       m_ListPrinter.InsertItem(i,NULL);      //插入一行

       LPPRINTER_INFO_2 pInfo=&pPrinterEnum[i];

       m_ListPrinter.SetItemText(i,0,pInfo->pPrinterName);

       m_ListPrinter.SetItemText(i,1,pInfo->pServerName);

       m_ListPrinter.SetItemText(i,2,pInfo->pDriverName);

       m_ListPrinter.SetItemText(i,3,pInfo->pPrintProcessor);

    }

   LocalFree(pPrinterEnum);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值