Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI/HTA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/41: Рейтинг темы: голосов - 41, средняя оценка - 4.98
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
1

Как узнать средствами WSH или Script принтер по умолчанию

27.07.2013, 11:25. Показов 8198. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно различать "принтер по умолчанию" и "активный принтер".

Меня интересует именно "принтер по умолчанию".

Есть ли какой-нибудь член у WSH или Script, который позволяет узнать имя принтера по умолчанию.

Наверное, можно это узнать, прочитав Windows-реестр, но может быть есть уже готовый член у WSH или Script?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.07.2013, 11:25
Ответы с готовыми решениями:

Как узнать средствами WSH или WMI, какие файлы открыты
Как средствами WSH или WMI узнать, открыт файл или нет?

Как отправить на принтер текст средствами java script?
ситуация такая, есть форма, после нажатия кнопки печать, результаты формы обрабатываются средствами...

как отправить на принтер текст средствами java script?
ситуация такая, есть форма, после нажатия кнопки печать, результаты формы обрабатываются средствами...

Запуск скриптов sql из командной строки или средствами WSH
Подскажите пожалуйста. Есть ли возможность орудовать IBExpert-ом или другим подобным инструментом...

13
1177 / 419 / 106
Регистрация: 31.03.2012
Сообщений: 1,145
28.07.2013, 03:16 2
wmi
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Option Explicit
Dim oSrv, oPrn
On Error Resume Next
Set oSrv = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
If Err.Number <> 0 Then
    WScript.Echo Err.Number & ": " & Err.Description
    WScript.Quit
End If
For Each oPrn In oSrv.ExecQuery("SELECT * FROM Win32_Printer")
    If oPrn.Default Then
        WScript.Echo oPrn.Name
        Exit For
    End If
Next
Реестр
Visual Basic
1
2
3
4
5
Option Explicit
Dim oSh, sPrn
Set oSh = CreateObject("WScript.Shell")
sPrn = oSh.RegRead("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device")
WScript.Echo(sPrn)
1
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
28.07.2013, 07:39  [ТС] 3
Пункт 1

"WMI" не относится к "WSH" и "Script". Мне "WMI" не хочется использовать из-за того, что нужно какие-то тонкости знать, например, про настройки безопасности. При использовании "WHS" и "Script" не нужно об этом думать.


Пункт 2

Joeymax, ваше решение связано с чтением реестра, а хотелось бы другой способ узнать.


Пункт 3

Joeymax, если кроме чтения реестра нет способа, то тогда попробую использовать Ваш способ "Реестр". Кстати в реестре нет раздела "Device". Есть раздел "Devices". Уже какая-то сложность.
0
1177 / 419 / 106
Регистрация: 31.03.2012
Сообщений: 1,145
28.07.2013, 08:48 4
У объекта WScript.Network, вроде есть метод получения коллекции принтеров EnumPrinterConnections, есть метод установки принтера по умолчанию SetDefaultPrinter. Но нигде не нашел способа получить DefaultPrinter. В справке (script56.chm) есть пример получения списка, приведу его здесь
Visual Basic
1
2
3
4
5
6
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set oPrinters = WshNetwork.EnumPrinterConnections
WScript.Echo "Network printer mappings:"
For i = 0 to oPrinters.Count - 1 Step 2
    WScript.Echo "Port " & oPrinters.Item(i) & " = " & oPrinters.Item(i+1)
Next
Цитата Сообщение от Скрипт Посмотреть сообщение
Кстати в реестре нет раздела "Device". Есть раздел "Devices". Уже какая-то сложность.
Странно, но у меня это работает см. картинку
Миниатюры
Как узнать средствами WSH или Script принтер по умолчанию  
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
28.07.2013, 08:51  [ТС] 5
Цитата Сообщение от Joeymax Посмотреть сообщение
Странно, но у меня это работает
у меня тоже работает. Поэтому и сложность, что не понятно, почему это работает.


Цитата Сообщение от Joeymax Посмотреть сообщение
В справке (script56.chm)
а что это за справка? Как мне её можно увидеть?
0
1177 / 419 / 106
Регистрация: 31.03.2012
Сообщений: 1,145
28.07.2013, 09:45 6
Windows Script 5.7 for Windows XP
Скачай, установи - в этом дистрибутиве и находится этот файл.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
28.07.2013, 09:50  [ТС] 7
Joeymax, эта программа только на английском языке?
0
1177 / 419 / 106
Регистрация: 31.03.2012
Сообщений: 1,145
28.07.2013, 09:59 8
Да, только на нем
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
28.07.2013, 10:07  [ТС] 9
Joeymax, у меня "Windows 7" и я так понял, что для "Windows 7" нет этой программы.
0
1177 / 419 / 106
Регистрация: 31.03.2012
Сообщений: 1,145
28.07.2013, 11:55 10
В семерке акцент сместился в сторону PowerShell, но Windows Script будет работать. ИМНО, в семерке уже должна быть установлена версия 5.7, но в дистрибутив самой Винды обычно файл script56.chm не включают. По крайней мере на XP - точно.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
28.07.2013, 11:59  [ТС] 11
Joeymax, и как запустить в "Windows 7" эту программу?
0
1177 / 419 / 106
Регистрация: 31.03.2012
Сообщений: 1,145
28.07.2013, 12:33 12
Лучший ответ Сообщение было отмечено как решение

Решение

Короче, VbsEdit, скачай и установи, он уже включает этот файл в качестве встроенной справки. Очень удобный редактор, автодополнение, инспектор объектов и еще много чего. Из минусов платный, но работает всегда и при запуске скрипта на выполнение с каждым разом увеличивает паузу.
0
2618 / 548 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
28.07.2013, 19:51 13
Не знаю, как в "семёрке", а в XP всё тривиально:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim objFolder, strTemp, intTemp
Set objFolder = CreateObject("Shell.Application").NameSpace(&H4)
Select Case objFolder.Items.Count
    Case 1: strTemp = "Подключений не найдено."
    Case 2
        strTemp = objFolder.Items.Item(1).Name
        intTemp = objFolder.Items.Item(1).Verbs.Count
    Case Else
        strTemp = objFolder.Items.Item(1).Name
        intTemp = objFolder.Items.Item(1).Verbs.Count
        For i = 2 To objFolder.Items.Count - 1
            If objFolder.Items.Item(i).Verbs.Count < intTemp Then
                strTemp = objFolder.Items.Item(i).Name
                intTemp = objFolder.Items.Item(i).Verbs.Count
            End If
        Next
End Select
WScript.Echo "Принтер по умолчанию: " & strTemp
WScript.Quit 0
Суть проста: у принтера по умолчанию на одно стандартное действие ("глагол") меньше, чем у прочих.
0
2618 / 548 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
31.07.2013, 13:36 14
"Дошли руки", чтобы проверить работоспособность предложенного в предыдущем сообщении сценария. В результате получилась новая версия, корректность работы которой проверена на XP/2003/2008/7.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Dim objFolder, objPrinters
Dim arrPrinters, strVerbs, strName
Dim strTemp, intTemp, i, j, k
 
arrPrinters = Array(): j = -1
Set objPrinters = CreateObject("WScript.Network").EnumPrinterConnections
For i = 1 To objPrinters.Count - 1 Step 2
    strTemp = objPrinters.Item(i)
    If Left(strTemp, 2) = "\\" Then strTemp = StrReverse(Split(StrReverse(strTemp), "\")(0))
    j = j + 1
    ReDim Preserve arrPrinters(j)
    arrPrinters(j) = strTemp
Next
Set objPrinters = Nothing
If UBound(arrPrinters) >= 0 Then
    Set objFolder = CreateObject("Shell.Application").NameSpace(&H4)
    For i = 0 To objFolder.Items.Count - 1
        strTemp = objFolder.Items.Item(i).Name: strVerbs = vbNullString
        For j = 0 To UBound(arrPrinters)
            If StrComp(arrPrinters(j), Left(strTemp, Len(arrPrinters(j))), vbTextCompare) = 0 Then
                intTemp = objFolder.Items.Item(i).Verbs.Count
                For k = 0 To intTemp - 1
                    strVerbs = strVerbs & objFolder.Items.Item(i).Verbs.Item(k).Name & vbNewLine
                Next
                If InStr(1, strVerbs, "Использовать по умолчанию", vbTextCompare) = 0 Then
                    strName = arrPrinters(j)
                    Exit For
                End If
            End If
        Next
        If Len(strName) > 0 Then Exit For
    Next
    Set objFolder = Nothing
    If Len(strName) > 0 Then
        WScript.Echo "Принтер по умолчанию: " & strName
    Else
        WScript.Echo "Принтер по умолчанию не найден."
    End If
Else
    WScript.Echo "Подключений не найдено."
End If
WScript.Quit 0
1
31.07.2013, 13:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.07.2013, 13:36
Помогаю со студенческими работами здесь

Как средствами VB узнать IP адрес или имя ПК?
Как средствами VB узнать IP адрес или имя ПК, запустившего приложение и отослать его на другой...

Как средствами VBA узнать IP адрес или имя ПК?
Как средствами VBA узнать IP адрес или имя ПК, запустившего файл проекта и отослать его на другой...

Как узнать значение идинтификатора при наведении мышки на элемент средствами javascript или jqery?
Приветствую вас друзья. Задача такова, есть массив с городами (их очень много) который я вывожу...

Как сделать принтер по умолчанию, выбранный мной, а не выбранный автоматом, перенаправленный принтер?
или как запустить батник при подключении сеанса ? и в этом батнике написать аыбор принтера по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru