VC++訪問打印機

//遍歷電腦的打印機
#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);

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章