Проверьте это: http://msdn.microsoft.com/en-us/library/aa394363(v=vs.85).aspx
Пример, использующий только WMI:
#include <Array.au3>
$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
$colInstalledPrinters = $objWMIService.ExecQuery ("Select * from Win32_Printer",Default,48)
For $objPrinter In $colInstalledPrinters
$arr = $objPrinter.PrinterPaperNames
_ArrayDisplay($arr, $objPrinter.Name)
Next
Или попробуйте еще раз напечатать фактические названия бумаги (запустите в SciTE, чтобы вы могли увидеть вывод из ConsoleWrite):
Const $DC_PAPERS = 2
Const $DC_PAPERSIZE = 3
Const $DC_PAPERNAMES = 16
$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
$colInstalledPrinters = $objWMIService.ExecQuery ("Select Name, PortName from Win32_Printer")
For $objPrinter In $colInstalledPrinters
$result = DllCall("winspool.drv", "long", "DeviceCapabilitiesA", "str", $objPrinter.Name, "str", $objPrinter.PortName, "int", $DC_PAPERS, "str", Chr(0), "long", 0)
$s_struct = ""
$s_struct2 = ""
For $i = 1 To $result[0]
$s_struct = $s_struct & "char[64];"
Next
For $i = 1 To $result[0]
$s_struct2 &= "long x;long y;"
Next
$s_struct = StringTrimRight($s_struct, 1)
$s_struct2 = StringTrimRight($s_struct2, 1)
$j = 1
$struct = DllStructCreate($s_struct)
$pointStruct = DllStructCreate($s_struct2)
$result2 = DllCall("winspool.drv", "long", "DeviceCapabilitiesA", "str", $objPrinter.Name, "str", $objPrinter.PortName, "int", $DC_PAPERNAMES, "ptr", DllStructGetPtr($struct), "long", 0)
$result3 = DllCall("winspool.drv", "long", "DeviceCapabilitiesA", "str", $objPrinter.Name, "str", $objPrinter.PortName, "int", $DC_PAPERSIZE, "ptr", DllStructGetPtr($pointStruct), "long", 0)
ConsoleWrite($objPrinter.Name & " on Port: " & $objPrinter.PortName & @CRLF)
For $i = 1 To $result[0]
ConsoleWrite(DllStructGetData($struct, $i) & " (" & DllStructGetData($pointStruct, $j) & "mm x " & DllStructGetData($pointStruct, $j + 1) & "mm)" & @CRLF)
$j += 2
Next
$struct = 0
$pointStruct = 0
Next