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)排第二。请求帮忙!
{
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)排第二。请求帮忙!
::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);
// .....
}
}
pPrnInfo的指针没变肯定3次相同,亲你怎么给你带吗就直接用的?你不会让指针偏移过去的么