1513 / 483 / 57
Регистрация: 10.04.2009
Сообщений: 8,213
1

Получить список модемов

22.05.2012, 10:05. Показов 1565. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, сейчас есть код

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Option Explicit
 
Sub bbb_модемы()
 
    Dim objWMIService As Object
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
 
    Dim colItems As Object
    Set colItems = objWMIService.ExecQuery("Select * from Win32_POTSModem")
 
    Dim Comm1 As MSComm
 
    If Comm1 Is Nothing Then
        MsgBox "Переменный 'Comm1' пустой, аднака.", vbExclamation, "Думайте"
        Exit Sub
    Else
        'пробуем назначить порт с которым будем работать
        Comm1.CommPort = 3
    End If
 
End Sub
лицезрею сообщение
Переменный 'Comm1' пустой, аднака
сорока на хвосте принесла, что нужно создать создать экземпляр класса чтобы этого не было, как это выглядит в коде?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2012, 10:05
Ответы с готовыми решениями:

Получить из системы список месяцев
Здравствуйте! Кто бы подсказал, как получить список (массив) месяцев из системы? Мне нужно...

Получить список всех подпапок
Нужно получить список всех подпапок в папке без использования FSO. Код с использованием FSO...

Получить список имен листов
В файле много листов. Имена у листов меняются. У листы делятся на группы. Каждая группа выполняет...

Получить список доступных принтеров
Печатаю форму методом UserForm.PrintForm Подскажите, пожалуйста, как: 1. Получить список...

4
призрак
3262 / 890 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
22.05.2012, 10:25 2
а так:
Visual Basic
1
Dim Comm1 As New MSComm
не получится?

пс. в модемах дубдубом
ппс. ну и еще это и вот это нагуглилось. но - для VB.
1
Памирыч
22.05.2012, 13:21
  #3
 Комментарий модератора 
Ципихович Эндрю, а сорока на хвосте не приносила, что кривые заголовки - это наказуемое дело? Предупреждение, аднака!
0
1513 / 483 / 57
Регистрация: 10.04.2009
Сообщений: 8,213
22.05.2012, 20:24  [ТС] 4
имею код:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
'защищает от некоторых, трудно уловимых ошибок
'Option - Вариант
'Explicit - Явный
Option Explicit
 
Sub Все_модемы()
  
    Dim objWMIService As Object
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
 
    Dim colItems As Object
    Set colItems = objWMIService.ExecQuery("Select * from Win32_POTSModem")
 
    Dim objItem As Object
 
    Dim Количество_модемов As Long
    Dim NumberPort As String
    Dim Результат As String
    Dim Ответ_модема As String
    Dim Comm1 As New MSComm
    Dim i As Long
 
    For Each objItem In colItems
        'имя порта
        MsgBox$ objItem.AttachedTo
        'имя порта без первых трёх букв
        MsgBox$ Right$(objItem.AttachedTo, (Len(objItem.AttachedTo) - 3))
        NumberPort = Right$(objItem.AttachedTo, (Len(objItem.AttachedTo) - 3))
        MsgBox$ NumberPort
        'назначаем порт с которым будем работать
        'Функция CLng(Conversion to Long) используется для приведения выражения в тип Long
        Comm1.CommPort = CLng(NumberPort)
        'если преобразовываемый тип данных String,тогда он должен быть числом
        'иначе возникает ошибка стадии выполнения - 13 (Type mismasth)
        'делаем установки элемента управления MS Comm
        Comm1.Settings = "9600,N,8,1"
        'используем весь буфер
        Comm1.InputLen = 0
        'открываем порт
        Comm1.PortOpen = True
        'посылаем команду модему
        Comm1.Output = "AT" + Chr$(13)
        'ожидаем возврата данных, задержка тут ламерская, но чисто что бы показать работу
        Do
            i = i + 1
            DoEvents
        Loop Until i = 1000000 Or Comm1.InBufferCount >= 2
        'читаем ответ "ОК" в последовательном порту
        Ответ_модема = Comm1.Input
        'закрываем порт
        Comm1.PortOpen = False
 
        Количество_модемов = Количество_модемов + 1
 
        If Len(Ответ_модема) <> 0 Then
            Результат = Результат & Количество_модемов & " " & objItem.Model & " - " & objItem.AttachedTo & " - " & Ответ_модема & vbCrLf
        Else
            Результат = Результат & Количество_модемов & " " & objItem.Model & " - " & objItem.AttachedTo & " - Ответ модема не ОК" & vbCrLf
        End If
  
        If Err.Number <> 0 Then
            MsgBox$ Err.Number & "-" & Err.Description
            Err.Number = 0
            'или Err.Clear - обнуляем ошибку
        End If
    Next
 
    MsgBox$ "Количество модемов: " & Количество_модемов & vbCrLf & Результат
 
    Selection.EndKey Unit:=wdStory
    Selection.TypeText Text:="Количество модемов: " & Количество_модемов & vbCrLf & Результат
 
End Sub
В цикл For Each objItem In colItems не заходит, потому, что objItem = Nothing
в тоже время я ведь не создал Set objItem =
как его создать?
0
1513 / 483 / 57
Регистрация: 10.04.2009
Сообщений: 8,213
26.05.2012, 12:06  [ТС] 5
имею код:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
Option Explicit
 
Sub aКоличество_модемов_все_модемы()
 
    Dim WMI As Object
    Set WMI = GetObject("winmgmts:\\.\root\cimv2")
 
    Dim myCollection As Object
    Set myCollection = WMI.ExecQuery("Select * from Win32_POTSModem")
 
    Dim Количество_модемов As Long
    'Количество_модемов = myCollection.Count
 
    Dim Результат As String
    Dim Ответ_модема As String
 
    Dim objItem As Object
 
    'если выделяет "Comm As New MSComm" и сообщение User-defined type not defined
    'значит в Tools References... нужно поставить опцию у Microsoft Comm Control 6.0
    Dim Comm As New MSComm
 
    Dim NumberCommPort As Long
    Dim i As Long
 
    For Each objItem In myCollection
        'имя порта
        'MsgBox$ objItem.AttachedTo
        'имя порта без первых трёх букв
        'Mid$(String,Start,[Length])
        'MsgBox$ Mid$(objItem.AttachedTo, 4)
        'оператор для отлова ошибок, указывает, что при возникновении ошибки нужно переходить к следующей строке кода
        On Error Resume Next
        'Функция CLng(Expression) используется для приведения выражения в тип Long
        'Если Expression имеет тип данных String,то он должен быть числом,иначе возникает ошибка стадии выполнения Type mismasth
        NumberCommPort = CLng(Mid$(objItem.AttachedTo, 4))
        If Err.Number <> 0 Then
            MsgBox$ _
                    Err.Number & "-" & Err.Description, vbOKOnly, _
                               "Внимание"
            'перейти к метке с именем ...
            GoTo Конец
        End If
        'оператор для отлова ошибок, указывает, что при возникновении ошибки нужно переходить к следующей строке кода
        On Error Resume Next
        'назначаем порт с которым будем работать
        Comm.CommPort = NumberCommPort
        'делаем установки элемента управления MS Comm
        Comm.Settings = "9600,N,8,1"
        'используем весь буфер
        Comm.InputLen = 0
        'открываем порт
        Comm.PortOpen = True
        'посылаем команду модему
        Comm.Output = "AT" + Chr$(13)
        'ожидаем возврата данных, задержка тут ламерская, но чисто что бы показать работу
        Do
            i = i + 1
            DoEvents
        Loop Until i = 1000000 Or Comm.InBufferCount >= 2
        MsgBox$ "|"
        'читаем ответ "ОК" в последовательном порту
        Ответ_модема = Comm.Input
        'закрываем порт
        Comm.PortOpen = False
 
        Количество_модемов = Количество_модемов + 1
 
        If Len(Ответ_модема) <> 0 Then
            Результат = Результат & Количество_модемов & " " & objItem.Model & " - " & objItem.AttachedTo & " - " & Ответ_модема & vbCrLf
        Else
            Результат = Результат & Количество_модемов & " " & objItem.Model & " - " & objItem.AttachedTo & " - Ответ модема не ОК" & vbCrLf
        End If
 
    Next objItem
 
    MsgBox$ "Количество модемов: " & Количество_модемов & vbCrLf & Результат
 
    Selection.TypeText Text:="Количество модемов: " & Количество_модемов & vbCrLf & Результат
 
Конец:
 
    'установка объекта в значение Nothing требуется для освобождения памяти, которая была выделена для создания этого объекта
    Set WMI = Nothing
    Set myCollection = Nothing
 
End Sub
на первой интеракции, где СОМ3, который рабочий - всё ОК
вторая интеракция, где СОМ6, который на вкладке Панель управления Телефон Модемы указан как Отсутствует не дождаться выполнения строки MsgBox$ "|" и как быть??
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2012, 12:06
Помогаю со студенческими работами здесь

Как получить список неких файлов?
Задача: получить в столбик в лист ЕКСЕЛЬ список файлов из определенного каталога? Догадываюсь что...

Как получить список Worksheets из Excel?
Otkryvayu object Workbook, v nem 3 Worksheets Dim wbkMy As Excel.Workbook Set wbkMy =...

Как из фрагмента текста получить маркированный список
макрос преобразующий фрагмент текста в маркированны список в VBA

Как получить список папок в заданной директории
Подскажите как получить список папок в заданной директории (при этом имена файлов в список попадать...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru