1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
int GetPrinterList(CComboBox *pCombo)
{
PRINTER_INFO_2* list;
DWORD cnt = 0;
DWORD sz = 0;
int i;
int sl;
EnumPrinters( PRINTER_ENUM_LOCAL, NULL, 2, NULL, 0, &sz, &cnt );
if ( (list = (PRINTER_INFO_2*) malloc( sz )) == 0 ) return 0;
if (!EnumPrinters( PRINTER_ENUM_LOCAL, NULL, 2, (LPBYTE)list, sz, &sz, &cnt))
{
free( list );
return 0;
}
CString str,strSize;
HANDLE hDriver;
for ( i = 0, sl = 0; i < (int)cnt; i++ )
{
// load printer driver
if(!OpenPrinter(list[i].pPrinterName,&hDriver,NULL)) continue;
if(!hDriver) continue;
DWORD dwBufSize = 0;
LPDEVMODE lpDM;
// get DEVMODE stuff from driver
dwBufSize =DocumentProperties( NULL,
(HANDLE)hDriver,
(LPSTR)list[i].pPrinterName,
(LPDEVMODE)NULL,
(LPDEVMODE)NULL,
(DWORD) 0);
// alloc space for devmode stuff
HANDLE hDevMode= GlobalAlloc(GMEM_MOVEABLE, dwBufSize);
lpDM = (LPDEVMODE)GlobalLock(hDevMode);
dwBufSize =DocumentProperties(NULL,
(HANDLE)hDriver,
(LPSTR)list[i].pPrinterName,
(LPDEVMODE)lpDM,
(LPDEVMODE)NULL,
(DWORD)DM_COPY);
strSize="Autre"; // a faire ...
if(lpDM->dmPaperSize==DMPAPER_A4 ) strSize="A4";
ClosePrinter(hDriver);
::GlobalFree(hDevMode);
str=list[i].pPrinterName;
str+=" ";
str+=strSize;
pCombo->AddString(str);
}
free( list );
return cnt;
} |
Partager