Borland C++ Builder VCL FAQ - Перечисление принтеров

ОГЛАВЛЕНИЕ


Перечисление принтеров

Код перечисляет все принтеры и выводит данные о них в Мемо:
PRINTER_INFO_2 *Pr; 
DWORD byteNeed = 0,prCount=0;//Кол-во необходимых байт, количество принтеров
//Делаем первый вызов с буфером NULL, чтоб узнать нужный размер буфера
EnumPrinters(PRINTER_ENUM_CONNECTIONS|PRINTER_ENUM_LOCAL,NULL,2,NULL,0,&byteNeed,&prCount);
//Создаем буфер
Pr = new PRINTER_INFO_2 [byteNeed];
//Делаем второй вызов уже с нужным буфером
if(EnumPrinters(PRINTER_ENUM_CONNECTIONS|PRINTER_ENUM_LOCAL,NULL,2,(LPBYTE)Pr,byteNeed,&byteNeed,&prCount))
  {
    for(int i = 0; i < prCount; ++i)
      {
        Memo1->Lines->Add("Printer*************");
        Memo1->Lines->Add("Имя: " + AnsiString(Pr[i].pPrinterName));
        Memo1->Lines->Add("Порт: " + AnsiString(Pr[i].pPortName));
        Memo1->Lines->Add("Драйвер: " + AnsiString(Pr[i].pDriverName));
        Memo1->Lines->Add("");
      }
  }
delete Pr;