• 遍历电脑打印机、设置默认打印机、EnumPrinters ,SetDefaultPrinter,GetDefaultPrinter


    时间紧迫,直接上代码:

    得到电脑的默认打印机

        TCHAR szBuffer[1024]={0};
        DWORD length = 1024;
        int ret = ::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);
        }
        else if(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) ; 
        const LPPRINTER_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(unsigned int 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);
    本人新博客网址为:http://www.hizds.com
    本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段。c++/lua/windows逆向交流群:69148232
  • 相关阅读:
    VBScript的参数引用
    异常处理规范
    测试感悟
    URL重写
    避免重复记录
    EJB 异常处理探试法
    EJB 异常处理的最佳做法(1)
    使用vbscript脚本调用web服务
    用Dom4j解析XML及中文问题
    lucene简介
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/2655090.html
Copyright © 2020-2023  润新知