遍历电脑打印机、设置默认打印机、及WIN32 打印API

    本文地址:http://tongxinmao.com/Article/Detail/id/251

    得到电脑的默认打印机


        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.cnblogs.com/zhangdongsheng/

    作者:张东升 技术交流群:69148232




    4. API之打印函数
    AbortDoc 取消一份文档的打印
    AbortPrinter 删除与一台打印机关联在一起的缓冲文件
    AddForm 为打印机的表单列表添加一个新表单
    AddJob 用于获取一个有效的路径名,以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号
    AddMonitor 为系统添加一个打印机监视器
    AddPort 启动"添加端口"对话框,允许用户在系统可用端口列表中加入一个新端口
    AddPrinter 在系统中添加一台新打印机
    AddPrinterConnection 连接指定的打印机
    AddPrinterDriver 为指定的系统添加一个打印驱动程序
    AddPrintProcessor 为指定的系统添加一个打印处理器
    AddPrintProvidor 为系统添加一个打印供应商
    AdvancedDocumentProperties 启动打印机文档设置对话框
    ClosePrinter 关闭一个打开的打印机对象
    ConfigurePort 针对指定的端口,启动一个端口配置对话框
    ConnectToPrinterDlg 启动连接打印机对话框,用它同访问网络的打印机连接
    DeleteForm 从打印机可用表单列表中删除一个表单
    DeleteMonitor 删除指定的打印监视器
    DeletePort 启动"删除端口"对话框,允许用户从当前系统删除一个端口
    DeletePrinter 将指定的打印机标志为从系统中删除
    DeletePrinterConnection 删除与指定打印机的连接
    DeletePrinterDriver 从系统删除一个打印机驱动程序
    DeletePrintProcessor 从指定系统删除一个打印处理器
    DeletePrintProvidor 从系统中删除一个打印供应商
    DeviceCapabilities 利用这个函数可获得与一个设备的能力有关的信息
    DocumentProperties 打印机配置控制函数
    EndDocAPI 结束一个成功的打印作业
    EndDocPrinter 在后台打印程序的级别指定一个文档的结束
    EndPage 用这个函数完成一个页面的打印,并准备设备场景,以便打印下一个页
    EndPagePrinter 指定一个页在打印作业中的结尾
    EnumForms 枚举一台打印机可用的表单
    EnumJobs 枚举打印队列中的作业
    EnumMonitors 枚举可用的打印监视器
    EnumPorts 枚举一个系统可用的端口
    EnumPrinterDrivers 枚举指定系统中已安装的打印机驱动程序
    EnumPrinters 枚举系统中安装的打印机
    EnumPrintProcessorDatatypes 枚举由一个打印处理器支持的数据类型
    EnumPrintProcessors 枚举系统中可用的打印处理器
    Escape 设备控制函数
    FindClosePrinterChangeNotification 关闭用FindFirstPrinterChangeNotification函数获取的一个打印机通告对象
    FindFirstPrinterChangeNotification 创建一个新的改变通告对象,以便我们注意打印机状态的各种变化
    FindNextPrinterChangeNotification 用这个函数判断触发一次打印机改变通告信号的原因
    FreePrinterNotifyInfo 释放由FindNextPrinterChangeNotification函数分配的一个缓冲区
    GetForm 取得与指定表单有关的信息
    GetJob 获取与指定作业有关的信息
    GetPrinter 取得与指定打印机有关的信息
    GetPrinterData 为打印机设置注册表配置信息
    GetPrinterDriver 针对指定的打印机,获取与打印机驱动程序有关的信息
    GetPrinterDriverDirectory 判断指定系统中包含了打印机驱动程序的目录是什么
    GetPrintProcessorDirectory 判断指定系统中包含了打印机处理器驱动程序及文件的目录
    OpenPrinter 打开指定的打印机,并获取打印机的句柄
    PrinterMessageBox 在拥有指定打印作业的系统上显示一个打印机出错消息框
    PrinterProperties 启动打印机属性对话框,以便对打印机进行配置
    ReadPrinter 从打印机读入数据
    ResetDC 重设一个设备场景
    ResetPrinter 改变指定打印机的默认数据类型及文档设置
    ScheduleJob 提交一个要打印的作业
    SetAbortProc 为Windows指定取消函数的地址
    SetForm 为指定的表单设置信息
    SetJob 对一个打印作业的状态进行控制
    SetPrinter 对一台打印机的状态进行控制
    SetPrinterData 设置打印机的注册表配置信息
    StartDoc 开始一个打印作业
    StartDocPrinter 在后台打印的级别启动一个新文档
    StartPage 打印一个新页前要先调用这个函数
    StartPagePrinter 在打印作业中指定一个新页的开始
    WritePrinter 将发送目录中的数据写入打印机


    上一篇:激光打印机工作原理
    下一篇:Android连接网络打印机,jSocket连接网络打印机