powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / сделать программно скрин вкладки
25 сообщений из 189, страница 3 из 8
сделать программно скрин вкладки
    #37800088
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть проект
Без ложки дёгтя не обошлось, сначала есть на форме "следующие модемы", а потом появляется "На компьютере установлены"
слабый компьютер или можно уладить?
правда пробовал несколько раз - по разному загружается
Но что совершенно точно когда эта форма открыта взять и сверить самому не возможно в панели управления нельзя открыть даже Телефоны и модемы, почему? это можно уладить?
2
Пользуюсь этим кодом:
Код: vbnet
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.
    Sub Все_модемы()

    On Error Resume Next

    Dim strComputer As String
    strComputer = "."

    Dim objWMIService As Object
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

    Dim colItems As Object
    Set colItems = objWMIService.ExecQuery("Select * from Win32_POTSModem")

    Dim objItem As Object

    Dim Количество_модемов As Byte
    Dim Результат As String

    Selection.EndKey Unit:=wdStory

    For Each objItem In colItems
        Количество_модемов = Количество_модемов + 1
        
        Результат = Результат & Количество_модемов & " " & objItem.Model & " - " & objItem.AttachedTo & Chr$(13)

    Next

    MsgBox$ "Количество модемов: " & Количество_модемов & Chr$(13) & Результат

End Sub



выполняя его имеются разногласия с картинкой, которую выдаёт в реале вкладка Модемы, есть возможность подправить этот код, чтобы было верно?
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37802239
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMкатастрофа...плавали, знаем не сходится ответ на запрос с тем, что на вкладкеЭндрю, то есть ты, до сих пор не разобрался, что там было неверно в твоем коде? Не удосужился хоть немного почитать по предложенным вариантам (а, насколько я помню, разговор тогда дошел до того, что можно было проверить наличие/работоспособность модемов AT-командами).
И теперь принялся выдумывать новые обходные пути... которые, если что и получилось бы, были преподнесены как очередное озарение и "фирменный подход"
Пичалька
Вот код, солянка, со всего что есть в сети:
Код: vbnet
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.
    Sub Все_модемы()
 
    On Error Resume Next
 
    Dim strComputer As String
    strComputer = "."
 
    Dim objWMIService As Object
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
 
    Dim colItems As Object
    Set colItems = objWMIService.ExecQuery("Select * from Win32_POTSModem")
 
    Dim objItem As Object
 
    Dim Количество_модемов As Byte
    Dim Результат As String
    Dim Ответ_модема As String
 
    Selection.EndKey Unit:=wdStory
 
    Dim Comm1 As MSComm
 
    Dim i As Long
 
    For Each objItem In colItems
        'имя порта
        'MsgBox$ objItem.AttachedTo
        'имя порта без первых трёх букв
        'MsgBox$ Right$(objItem.AttachedTo, (Len(objItem.AttachedTo) - 3))
        'назначаем порт скоторым будем работать
        Comm1.CommPort = Right$(objItem.AttachedTo, (Len(objItem.AttachedTo) - 3))
        'делаем установки элемента управления 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
 
    Next
 
    MsgBox$ "Количество модемов: " & Количество_модемов & vbCrLf & Результат
 
    Selection.TypeText Text:="Количество модемов: " & Количество_модемов & vbCrLf & Результат
 
End Sub


Ответ:
Количество модемов: 6
1 SoftV92 Data Fax Modem - COM3 - Ответ модема не ОК
2 SAMSUNG Mobile USB Modem - COM6 - Ответ модема не ОК
3 SAMSUNG Mobile USB Modem - COM4 - Ответ модема не ОК
4 HUAWEI Mobile Connect - 3G Modem - COM9 - Ответ модема не ОК
5 SAMSUNG Mobile USB Modem - COM12 - Ответ модема не ОК
6 HUAWEI Mobile Connect - 3G Modem - COM15 - Ответ модема не ОК

Вручную опросил SoftV92 Data Fax Modem говорит успешно, вот ересь!!!!!!!! потому и начинаешь приблуды придумывать
Ну есть внятный код?
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37802572
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всё с ног на голову, пробую следующий код
Код: vbnet
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.
88.
89.
90.
 Sub Все_модемы()

'в случае возникновения ошибки перейти к метке ...
    On Error GoTo Nextt

    Dim strComputer As String
    strComputer = "."

    Dim objWMIService As Object
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

    Dim colItems As Object
    Set colItems = objWMIService.ExecQuery("Select * from Win32_POTSModem")

    Dim objItem As Object

    Dim Количество_модемов As Byte
    Dim NumberPort As String
    Dim Результат As String
    Dim Ответ_модема As String

    Selection.EndKey Unit:=wdStory

    Dim Comm1 As 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

Nextt:

        If Err.Number <> 0 Then
            MsgBox$ Err.Number & "-" & Err.Description
            Err.Number = 0
            'или Err.Clear - обнуляем ошибку
        End If
    Next

    MsgBox$ "Количество модемов: " & Количество_модемов & vbCrLf & Результат

    Selection.TypeText Text:="Количество модемов: " & Количество_модемов & vbCrLf & Результат

End Sub[//SSRC]

на первом проходе когда СОМ3 на строке
Comm1.CommPort = CLng(NumberPort)
получаю ошибку
91 Object variable or With block variable not set Переменная объекта или переменная блока With не задана
то есть меня заводит в блок
[SRC vba] If Err.Number <> 0 Then
            MsgBox$ Err.Number & "-" & Err.Description
            Err.Number = 0
            'или Err.Clear - обнуляем ошибку
        End If


и там сообщает об этой ошибке
А на втором проходе когда СОМ6 на этой же строке также ошибка 91, и главное уже прямо на строке стопорится и не уводит в указанный блок, что не работает ранее сказанное On Error GoTo Nextt??
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37803555
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спрошу покороче, код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub aaaaaaaaa_модемы()

    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

    'назначаем порт с которым будем работать
    Comm1.CommPort = 3 'и здесь ошибка 91 имею ввиду СОМ3 он у меня есть
    '91 Object variable or With block variable not set Переменная объекта или переменная блока With не задана
    'что за ересь????

End Sub
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37803581
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофа
Код: vbnet
1.
'что за ересь????

А что, у тебя в переменной Comm1 у тебя что-то есть? Бросай уже программирование, ну не по зубам оно тебе.
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37803749
QValD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофаспрошу покороче, код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub aaaaaaaaa_модемы()

    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

    'назначаем порт с которым будем работать
    Comm1.CommPort = 3 'и здесь ошибка 91 имею ввиду СОМ3 он у меня есть
    '91 Object variable or With block variable not set Переменная объекта или переменная блока With не задана
    'что за ересь????

End Sub


Что делает оператор Dim?
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37803819
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QValDЧто делает оператор Dim?Отвечу за Эндрю: в его понимании позволяет избежать ругани Option Explicit, который его два года назад заставили использовать, чтобы еще и не ловить ошибки с взятыми с потолка переменными и функциями.
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37804031
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До него пока что не дошло, что данные в переменных с потолка тоже не берутся, и посторонние объектные типы сами собой в проект не подключаются.
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37804630
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
> До него пока что не дошло, что данные в переменных с потолка тоже не берутся - тут Вы не правы
>посторонние объектные типы сами собой в проект не подключаются - тут Вы правы, и как его подключить? вроде сколько кодов на эту тему смотрел не увидел
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37804635
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофатут Вы не правыеще как прав, если б понимал, не писал глупость
Dim Comm1 As MSComm
Comm1.CommPort = 3
с последующим сильным удивлением.
Как минимум задал бы вопрос "как инициализировать переменную", а не "что за ересь". Ересь это то, что ты пишешь.
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37804642
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, стоп Comm1.CommPort = 3 - там же точка есть и этому есть коммент - 'Назначаем порт скоторым будем работать, шо не так?
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37804645
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
назначаем ЧЕМУ? Что в переменной Comm1?
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37804655
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proназначаем ЧЕМУ? Что в переменной Comm1?
такой объект - порт называется (рассуждаю - вроде в Дим не должно быть объектов) ХЗ
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37804657
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК, начнём с минимума - "как инициализировать переменную"
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37804690
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофаОК, начнём с минимума - "как инициализировать переменную"начни с минимума. Почитай учебник. Что такое переменная, объектная переменная, объект, экземпляр объекта. Тогда вопрос отпадет сам собой.
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37804715
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, почитал, MSDN не помогает 546397 помогите хоть Вы
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37804722
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем помочь? Написать учебник "основы ООП"? Это тебе дорого будет стоить.
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37804837
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
катастрофаспрошу покороче, код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub aaaaaaaaa_модемы()

    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

    'назначаем порт с которым будем работать
    Comm1.CommPort = 3 'и здесь ошибка 91 имею ввиду СОМ3 он у меня есть
    '91 Object variable or With block variable not set Переменная объекта или переменная блока With не задана
    'что за ересь????

End Sub



Попробую ответить образно
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
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

...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37804975
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища, это называется приехали, печалька, и что это значит когда лицезрею сообщение
Переменный 'Comm1' пустой, аднака - как двигаться дальше?
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37805159
QValD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофаскукотища, это называется приехали, печалька, и что это значит когда лицезрею сообщение
Переменный 'Comm1' пустой, аднака - как двигаться дальше?
создать экземпляр класса.
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37805373
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QValD, трёх буковок не хватало New
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37805618
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофаQValD, трёх буковок не хватало Newэх, если бы ты еще сам до этого дошел, а не с посторонней подсказки (
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37808571
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProкатастрофаQValD, трёх буковок не хватало Newэх, если бы ты еще сам до этого дошел, а не с посторонней подсказки (
а разница то какая? да бог с ним, двигаюсь дальше
Код: vbnet
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.
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 =
как его создать? и этот господин Option Explicit не помогает
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37808588
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофаа разница то какая?а разница в том, что ты по сто раз спрашиваешь одно и то же. А если б сам один раз подумал, вместо того, чтобы копипастить, то и вопросов бы столько не было.
...
Рейтинг: 0 / 0
сделать программно скрин вкладки
    #37808591
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофаВ цикл For Each objItem In colItems не заходит, потому, что objItem = Nothingпочитай справку или учебник о том, что такое коллекция и как работает For Each
...
Рейтинг: 0 / 0
25 сообщений из 189, страница 3 из 8
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / сделать программно скрин вкладки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]