VC/MFC得到电脑的默认打印机、设置默认打印机、遍历电脑打印机

来源:互联网 发布:笔顺查询软件 编辑:程序博客网 时间:2024/05/17 03:08

http://www.cnblogs.com/zhangdongsheng/archive/2012/08/24/2655090.html

 

得到电脑的默认打印机、设置默认打印机、遍历电脑打印机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);

 

0 0
原创粉丝点击