bool HasInstallPrinter( CString& AllPrintrDriveName )
{
DWORD  Flags = PRINTER_ENUM_FAVORITE | PRINTER_ENUM_LOCAL; //local printers
DWORD  cbBuf;
DWORD  pcReturned ; DWORD  Level = 2;
TCHAR  Name[500] ;
LPPRINTER_INFO_2 pPrinterEnum = NULL ; memset(Name, 0, sizeof(TCHAR) * 500) ;
::EnumPrinters(Flags, Name, Level, NULL, 0, &cbBuf, &pcReturned) ;
pPrinterEnum = (LPPRINTER_INFO_2)LocalAlloc(LPTR, cbBuf + 4) ; if (!pPrinterEnum)
{
TRACE("Error %1d\n", GetLastError()) ;
return false;
} if (!EnumPrinters(
Flags,  // DWORD Flags, printer object types 
Name,  // LPTSTR Name, name of printer object 
Level,  // DWORD Level, information level 
(LPBYTE)pPrinterEnum,  // LPBYTE pPrinterEnum, printer information buffer 
cbBuf,  // DWORD cbBuf, size of printer information buffer
&cbBuf,  // LPDWORD pcbNeeded, bytes received or required 
&pcReturned)  // LPDWORD pcReturned number of printers enumerated 
)
{
TRACE("Error %1d\n", GetLastError()) ;
return false;
}
if(pcReturned > 0)
{
AfxMessageBox(pPrinterEnum->pDriverName);  //这就打一个驱动名称
AllPrintrDriveName = _T("ads");
return true;
}
else
return false;}上面代码中Name那个变量是空的,我就打出pPrinterEnum->pDriverName看到打出来就一个【Microsoft XPS Document Writer】驱动名,我在本机上装的驱动名没打出来,还有本机上有一个【Fax】打印驱动,以及我安装的【iR3225(2)】打印驱动,这两个都没有被AfxMessageBox显示出来……我想问下,是因为枚举的原因pPrinterEnum->pDriverName只存了【Microsoft XPS Document Writer】驱动名,还是只找到了【Microsoft XPS Document Writer】驱动名,因为【Microsoft XPS Document Writer】驱动名排在最后,Fax排第一,iR3225(2)排第二。请求帮忙!

解决方案 »

  1.   

    你就enum了一次吧怎么会有多个
      

  2.   

    你就查一次  难道期望pPrinterEnum->pDriverName把所有的都存起来?
      

  3.   

    DWORD dwSize,dwPrinters;
    ::EnumPrinters(nEnumType,NULL,5,NULL,0,&dwSize,&dwPrinters);
    if (dwSize <= 0)
    {
    return 0;
    }
    BYTE* pBuffer=new BYTE[dwSize];
    ::EnumPrinters(nEnumType,NULL,5,pBuffer,dwSize,&dwSize,&dwPrinters);
    if (dwPrinters!=0)
    {
    PRINTER_INFO_5* pPrnInfo=(PRINTER_INFO_5*)pBuffer;
    for (UINT i=0;i<dwPrinters;i++)
    {
                            AfxMessageBox(pPrnInfo->pPrinterName); 
                            // .....
    }
    }
      

  4.   

    我安你这样做循环的次数是对的,可是显示了3次都是同一个驱动名【Microsoft XPS Document Writer】……
      

  5.   


    pPrnInfo的指针没变肯定3次相同,亲你怎么给你带吗就直接用的?你不会让指针偏移过去的么
      

  6.   

    省略号后面有  pPrnInfo++;