Показать сообщение отдельно
Старый 24.02.2009, 15:32   #7  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
winapi вариант. Возвращает контейнер с адресами принтеров:
X++:
static client server container EnumPrinters()
{
    container   con;

    #define.PRINTER_ENUM_LOCAL(0x00000002)
    #define.PRINTER_ENUM_FAVORITE(0x00000004)

    DLL         _winApiDLL = new DLL("winspool.drv");
    DLLFunction _enumPrinters = new DLLFunction(_winApiDLL, 'EnumPrintersA');


    Binary      bytes_needed    = new Binary(4);
    Binary      returned        = new Binary(4);
    Binary      printers;
    Binary      bStr            = new Binary(255);
    Binary      bByte           = new Binary(1);

    Binary      PRINTER_INFO_4;


    int ret, i, offs;
    ;

    _enumPrinters.returns(ExtTypes::DWord);

    _enumPrinters.arg(  ExtTypes::DWord,
                        ExtTypes::Pointer,
                        ExtTypes::DWord,
                        ExtTypes::Pointer,
                        ExtTypes::DWord,
                        ExtTypes::Pointer,
                        ExtTypes::Pointer
                        );

    bStr.string(0, "");
    bByte.byte(0, 0);

    ret = _enumPrinters.call( #PRINTER_ENUM_LOCAL | #PRINTER_ENUM_FAVORITE,
                        bStr,
                        4,
                        bByte,
                        0,
                        bytes_needed,
                        returned );


    printers = new Binary(bytes_needed.dWord(0));


    ret = _enumPrinters.call(  #PRINTER_ENUM_LOCAL | #PRINTER_ENUM_FAVORITE,
                        bStr,
                        4,
                        printers,
                        bytes_needed.dWord(0),
                        bytes_needed,
                        returned );

    for (i = 0; i < returned.dWord(0); i++)
    {
        bStr.attach(printers.dWord(offs), 255);

        con += bStr.string(0);

        offs += 12;
    }

    return con;
}

Последний раз редактировалось Eldar9x; 24.02.2009 в 15:35.
За это сообщение автора поблагодарили: aidsua (1).