Показать сообщение отдельно
Старый 25.02.2009, 09:08   #12  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Дополнительно к функции WinAPI::EnumPrinters создайте еще одну:
X++:
static client server str GetPrinterPort(str _printerName)
{
    DLL         _winApiDLL = new DLL("kernel32.dll");
    DLLFunction _getProfileString = new DLLFunction(_winApiDLL, 'GetProfileStringA');


    Binary      _bStrApp = new Binary(10);
    Binary      _bStrKey = new Binary(255);
    Binary      _bStrDef = new Binary(1);
    Binary      _bStrRet = new Binary(255);


    ;

    _getProfileString.returns(ExtTypes::DWord);
    _getProfileString.arg(  ExtTypes::Pointer,
                            ExtTypes::Pointer,
                            ExtTypes::Pointer,
                            ExtTypes::Pointer,
                            ExtTypes::DWord);


    _bStrApp.string(0, "Devices");
    _bStrKey.string(0, _printerName);
    _bStrDef.string(0, "");


    _getProfileString.call( _bStrApp,
                            _bStrKey,
                            _bStrDef,
                            _bStrRet,
                            255);



    return strReplace(_bStrRet.string(0), "winspool,", '');
}
Тогда список принтеров (с портами) можно вывести так:
X++:
static void listPrinters(Args _args)
{
    container con;
    int i;
    ;

    con = WinAPI::EnumPrinters();

    for (i = 1; i <= conlen(con); i++)
        info(strfmt("%1 (%2)", conpeek(con, i), winAPI::GetPrinterPort(conpeek(con, i))));
}
За это сообщение автора поблагодарили: KingPeas (1), samolalex (2).