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

简介: 时间紧迫,直接上代码:   得到电脑的默认打印机 TCHAR szBuffer[1024]={0}; DWORD length = 1024; int ret = ::GetDefaultPrinter(szBuffer,&length); if(...

时间紧迫,直接上代码:

 

得到电脑的默认打印机

    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);

 

 

相关文章
|
10月前
|
数据采集 人工智能
LLM2LLM:LLM2LLM:用 LLM 来增强 LLM !通过教师模型合成数据,增强学生模型的训练数据集
LLM2LLM 是一种创新的迭代数据增强技术,通过教师模型生成合成数据,显著提升大语言模型在数据稀缺任务中的性能。
638 90
LLM2LLM:LLM2LLM:用 LLM 来增强 LLM !通过教师模型合成数据,增强学生模型的训练数据集
|
数据库 Android开发 开发者
构建高效Android应用:采用Kotlin与Jetpack的实践指南
【4月更文挑战第30天】 随着移动开发技术的不断演进,Android平台提供了多种工具和框架以提升应用性能和开发效率。在本文中,我们将深入探讨如何结合Kotlin语言的简洁性和Android Jetpack组件的强大功能来构建一个既高效又可维护的Android应用。通过分析现代Android应用架构的关键要素,我们将展示如何利用Kotlin的特性以及如何整合Jetpack中的LiveData、ViewModel和Room等组件,以实现响应式编程、数据持久化和生命周期管理。
|
机器学习/深度学习 编解码 计算机视觉
【深度学习】探秘PSD:合成到真实去雾框架的实例解析
【深度学习】探秘PSD:合成到真实去雾框架的实例解析
285 0
|
NoSQL 前端开发 Java
考研为了背单词,我手写了一个背单词小 app
考研为了背单词,我手写了一个背单词小 app
427 0
|
网络架构 Windows
解决Windows 11网络连接问题:教你轻松排查网络故障
解决Windows 11网络连接问题:教你轻松排查网络故障
1195 1
|
自然语言处理 搜索推荐 Java
Hanlp等七种优秀的开源中文分词库推荐
中文分词是中文文本处理的基础步骤,也是中文人机自然语言交互的基础模块。由于中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词。
4389 0
Hanlp等七种优秀的开源中文分词库推荐
|
容器 Kubernetes 网络协议
如何在阿里云容器服务ACK上部署应用管理/发布系统Spinnaker
Spinnaker是一个开源的多云持续交付平台,可帮助您方便管理应用以及快速交付应用。 Spinnaker的两个主要功能是: 应用管理 , 应用交付 Applications, clusters, and server groups是Spinnaker中非常重要的几个概念, Load balanc.
4197 0
|
机器学习/深度学习 并行计算 算法
|
JavaScript Java PHP
thrift中的超时(timeout)坑
最近在项目中采用thrift作为后台服务rpc框架,总体用下来性能还不错,跨语言特性使用起来也还行,但是也遇到了一些坑,其中之一就是超时问题(timeout),如果服务端些的某些业务场景耗时较长,thrift client几乎毫无意外的会遇到:Read timed out, 当然解决办法也很容易,thrift client端手动设置一个较长的超时时间即可。
2612 0