Цитата:
Сообщение от
ivas
погуглил... пишут что эт действительно порт, информация храниться гдето в реестре)
Похоже что информация о портах есть в этих ветках реестра:
Цитата:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices
Цитата:
Сообщение от
KingPeas
Вот только чистые названия принтеров эксель не кушает, ему нужно свое с указанием всех
(Ne01
, (LPT1
и т.д.
А получить список принтеров можно и через PrintJobSettings;
Набросал небольшой job получения списка принтеров (и портов из реестра) :
X++:
static void jbPrinterListByPrintJobSettings(Args _args)
{
PrintJobSettings printJobSettings ;
Name printerName ;
Counter printerNum ;
Counter printerCount;
TempStr getPrinterPort( Name _printerName )
{
int regKeyHandle ;
TempStr printerPorts ;
#WinAPI
// #define.RegistryKey( 'Software\\Microsoft\\Windows NT\\CurrentVersion\\Devices' )
#define.RegistryKey( 'Software\\Microsoft\\Windows NT\\CurrentVersion\\PrinterPorts' )
;
regKeyHandle = WinAPI::regOpenKey( #HKEY_CURRENT_USER, #RegistryKey, #KEY_READ ) ;
[ printerPorts ] = WinAPI::regGetValue( regKeyHandle, _printerName ) ;
WinAPI::regCloseKey( regKeyHandle );
return strline( strreplace( printerPorts, ',', '\n' ), 1 ) ;
}
;
printJobSettings = new printJobSettings() ;
printerCount = printJobSettings.getNumberOfPrinters() ;
setPrefix( strfmt( "Number of printers: %1, default device: %2", printerCount, printJobSettings.deviceName() ) ) ;
for( printerNum =1; printerNum <=printerCount; printerNum++ )
{
printerName = printJobSettings.getPrinter( printerNum ) ;
info( strfmt( "%1 (%2)", printerName, getPrinterPort( printerName ) ) ) ;
}
}
Получившийся результат: