![]() |
#8 |
MCTS
|
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). |