Что нового

[Сеть, интернет] Принтеры и Autoit. Получение списка принтеров на сервере

pvnn

Осваивающий
Сообщения
282
Репутация
31
В локальной сети существует компьютер (сервер) с адресом, например: \\172.**.**.**
При вводе данного адреса в <Пуск><Выполнить> мы попадаем на данный сервер и видим все предварительно расшаренные принтеры.

Вопрос 1: Как получить список всех этих принтеров на удаленном компьютере средствами autoit или WinApi?

Вопрос 2, логично вытекающий из первого, как средствами autoit подключить сетевой принтер на удаленном компьютере.
 
Автор
P

pvnn

Осваивающий
Сообщения
282
Репутация
31
Сам создал тему, сам на нее и отвечаю ;D
На вторую часть нашел ответ при помощи VBS:


Код:
; Подключение сетевого принтера

#Include <WinAPI.au3>        

$NetPrinter="\\server\printer name"       ; Путь к сетевому принтеру

; Подключить сетевой принтер (Используем VBS)
$net = ObjCreate("WScript.Network")
$Error=$net.AddWindowsPrinterConnection ($NetPrinter)

; Сделать "Использовать по умолчанию"
_WinAPI_SetDefaultPrinter($NetPrinter)


Еще нашел на забугорном форуме UDF, может добавлять сетевой принтер, делать его по умолчанию, удалять и проверять наличие:

http://www.autoitscript.com/forum/index.php?showtopic=79756&st=0&p=588438&#entry588438



Но главный вопрос темы остается открытый.
Как получить список расшаренных принтеров другого компьютера в локальной сети.
Что совсем никто не знает???
 
Автор
P

pvnn

Осваивающий
Сообщения
282
Репутация
31
Продолжаю говорить сам с собой

Вот так удалось получить список принтеров на удаленном компе

Код:
dim $Printers, $oService,$oPrinter,$iTotal,$strMsg,$oLocator

    $strServer="***.***.***"
    $strUser="username"
    $strPassword="******"


; Устанавливаем перехватчик COM-ошибок
$oMyError = ObjEvent("AutoIt.Error","MyErrFunc")

; Подключение к службе WMI. Создаем объект SwbemLocator
  $oLocator = ObjCreate("WbemScripting.SWbemLocator")
  If @error Then  MsgBox(0,'','Не удалось создать объект: WbemScripting.SWbemLocator')
  ; Вызываем метод ConnectServer(), который возвращает нам объект SwbemServices
  ; Данный олбъект можно использовать для выполнения запросов WQL, получения ссылок на объекты WMI и т. п.
    $oService = $oLocator.ConnectServer($strServer, "root\cimv2", $strUser, $strPassword)
    ; Если подключение удалось то получаем список принтеров
      $Printers = $oService.InstancesOf("Win32_Printer")

; Бежим по списку принтеров
    $iTotal = 0  ; Общее количество принтеров
    For $oPrinter in $Printers
       $iTotal = $iTotal + 1
       ; Составляем строку для выводна на экран
       $strMsg=$strMsg & _
       "Имя сервера: " & $strServer               & Chr(10) & _
       "Имя принтера: " & $oPrinter.DeviceID      & Chr(10) & _
       "Имя общей папки: " & $oPrinter.ShareName  & Chr(10) & _
       "Имя драйвера: " & $oPrinter.DriverName    & Chr(10) & _
       "Имя порта: " & $oPrinter.PortName         & Chr(10) & _
       "   " & Chr(10)
    next

    $strMsg=$strMsg & "Общее количество принтеров" & $iTotal
    ; Вывод на экран
    MsgBox (0,'',$strMsg)
Exit



Func MyErrFunc()
  $HexNumber=hex($oMyError.number,8)
  Msgbox(0,"Внимание COM Error!",    ""& _
             "err.description is: "    & @TAB & $oMyError.description    & @CRLF & _
             "err.windescription:"     & @TAB & $oMyError.windescription & @CRLF & _
             "err.number is: "         & @TAB & $HexNumber              & @CRLF & _
             "err.lastdllerror is: "   & @TAB & $oMyError.lastdllerror   & @CRLF & _
             "err.scriptline is: "     & @TAB & $oMyError.scriptline     & @CRLF & _
             "err.source is: "         & @TAB & $oMyError.source         & @CRLF & _
             "err.helpfile is: "       & @TAB & $oMyError.helpfile       & @CRLF & _
             "err.helpcontext is: "    & @TAB & $oMyError.helpcontext _
            )
			Exit
EndFunc


Спасибо мне ;)
Тема решена
 
Верх