遍历电脑打印机、设置默认打印机、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);
复制代码

 

 

作者:张东升
相关文章
|
3月前
|
C++
安装VS Code报错:您选定的驱动器或UNC共享不存在或不能访问。请选择其他位置。
安装VS Code报错:您选定的驱动器或UNC共享不存在或不能访问。请选择其他位置。
|
6月前
|
移动开发
H5启用打印机打印参数设置A4
H5启用打印机打印参数设置A4
78 0
|
安全 Windows
Windows 无法连接打印机,请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开,并且打印机地址正确。报错代码:0x00000709
Windows 无法连接打印机,请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开,并且打印机地址正确。报错代码:0x00000709
Windows 无法连接打印机,请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开,并且打印机地址正确。报错代码:0x00000709