Список сетевых подключений

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Список сетевых подключений

Сообщение Space » 22.11.2009 (Вс) 12:43

Как в этом коде избавиться от отбора сетевых подключений по строковым значениям, которые указаны юзером и неизвестны, и глаголы м.б. любыми в разных Виндах? Т.е. мне надо отобрать модемные и LAN подключения из списка.
Код: Выделить всё
strNetConn = "Сетевые подключения" ' Network Connections для англ. версии ОС
strConn = "Подключение по локальной сети" ' имя или часть имени подключения
'strNetConn = "Network Connections"
'strConn = "Local Area Connection"
strEnable = "&Включить" ' En&able для англ. версии ОС
strDisable = "&Отключить" ' Disa&ble для англ. версии ОС

Set objShell = CreateObject("Shell.Application")
Set objCP = objShell.Namespace(3) ' Панель управления
For Each elem In objCP.Items
    If elem.Name = strNetConn Then
        ' получение папки "Сетевые подключения"
        Set colNetwork = elem.GetFolder
        Exit For
    End If
Next

Set Conn = Nothing
For Each clsConn In colNetwork.Items
Debug.Print clsConn.Name; clsConn.Parent

    If InStr(LCase(clsConn.Name), LCase(strConn)) Then
        ' получение указанного подключения
        Set Conn = clsConn
        Exit For
    End If
Next
If Conn Is Nothing Then
    WScript.Echo "Network Connection not found"
    WScript.Quit
End If

bEnabled = True
Set objEnable = Nothing
Set objDisable = Nothing
For Each clsVerb In Conn.verbs
'Debug.Print clsVerb.Name
    ' если доступен глагол "Enable", подключение отключено
    If clsVerb.Name = strEnable Then
        Set objEnable = clsVerb
        bEnabled = False
    End If
    ' если доступен глагол "Disable", подключение подключено
    If clsVerb.Name = strDisable Then
        Set objDisable = clsVerb
    End If
Next

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 22.11.2009 (Вс) 19:21

ну допустим, тут ничего не сделаешь. А как добраться к этому списку через WNetEnumResource? У меня не получилось что-то.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Список сетевых подключений

Сообщение Viper » 23.11.2009 (Пн) 6:03

Space писал(а):ну допустим, тут ничего не сделаешь. А как добраться к этому списку через WNetEnumResource? У меня не получилось что-то.
Поиском по форуму находится минимум два примера использования WNetEnumResource.
Весь мир матрица, а мы в нем потоки байтов!

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 23.11.2009 (Пн) 10:04

да я уже весь инет обрыл. Везде примеры для получения списка компов в локалке, расшаренных ресурсов... А примера для списка соединений нет. Может, не ту функцию юзаю? Список модемных мне уже удалось получить через RAS ф-и. Осталось список LAN.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 23.11.2009 (Пн) 18:04

неужели никто не делал такого? :shock:

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Список сетевых подключений

Сообщение Viper » 23.11.2009 (Пн) 18:36

На этом форуме не судьба WNetEnumResource в поиске ввести? Введешь и будут тебе и примеры и способы использования, да еще и не один.
Весь мир матрица, а мы в нем потоки байтов!

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 23.11.2009 (Пн) 18:59

я ж сказал, не нашёл нужного примера.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 24.11.2009 (Вт) 21:20

три танкиста, три весёлых друга - экипаж машины боевой...

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Список сетевых подключений

Сообщение Nord777 » 25.11.2009 (Ср) 10:55

Посмотри в сторону WMI-класса CIM_NetworkAdapter и его свойств NetConnectionID и NetConnectionStatus
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 30.11.2009 (Пн) 22:04

А WMI работает, начиная с Windows ME? Хм, за модемные соединения молчит. Начал уж ковырять SetupDiEnumDeviceInfo...
Код: Выделить всё
strServer = "."

Set objWMI = GetObject("winmgmts://" & strServer & "/root\cimv2")
Set objInstances = objWMI.InstancesOf("Win32_NetworkAdapter", 48)

On Error Resume Next
For Each objInstance In objInstances
    With objInstance
'        Debug.Print .AdapterType
'        Debug.Print .AdapterTypeId
'        Debug.Print .AutoSense
'        Debug.Print .Availability
    '      Debug.Print .Caption
'        Debug.Print .ConfigManagerErrorCode
'        Debug.Print .ConfigManagerUserConfig
'        Debug.Print .CreationClassName
  '        Debug.Print .Description
'        Debug.Print .DeviceID
'        Debug.Print .ErrorCleared
'        Debug.Print .ErrorDescription
'        Debug.Print .Index
'        Debug.Print .InstallDate
'        Debug.Print .Installed
'        Debug.Print .InterfaceIndex
'        Debug.Print .LastErrorCode
   '     Debug.Print .MACAddress
'        Debug.Print .Manufacturer
'        Debug.Print .MaxNumberControlled
'        Debug.Print .MaxSpeed
'        Debug.Print .Name
        Debug.Print .NetConnectionID; .NetConnectionStatus
'        Debug.Print Join(.NetworkAddresses, ", ")
'        Debug.Print .PermanentAddress
'        Debug.Print .PNPDeviceID
'        Debug.Print Join(.PowerManagementCapabilities, ", ")
'        Debug.Print .PowerManagementSupported
'        Debug.Print .ProductName
'        Debug.Print .ServiceName
'        Debug.Print .Speed
'        Debug.Print .Status
'        Debug.Print .StatusInfo
'        Debug.Print .SystemCreationClassName
'        Debug.Print .SystemName
'        Debug.Print .TimeOfLastReset

   End With
Next
On Error GoTo 0

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 01.12.2009 (Вт) 18:07

проблемы с получением CLASSID_NetworkAdapter. И как правильно передавать CLASSID_NetworkAdapter в ф-ю CLSIDFromString, так?
Код: Выделить всё
Private Declare Function CLSIDFromString Lib "ole32" (ByVal lpsz As String, pclsid As Guid) As Long
Public Const CLASSID_NetworkAdapter = "{4d36e972-e325-11ce-bfc1-08002be10318}" 'найдено в инете
Private Type Guid
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type

lRet = CLSIDFromString(StrPtr(CLASSID_NetworkAdapter), Gd)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Список сетевых подключений

Сообщение Хакер » 01.12.2009 (Вт) 18:55

Спейс, ты извращенец? Зачем перекодировать константу-строку в константу-структуру, если можно сразу использовать константу-структуру?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 01.12.2009 (Вт) 19:09

каким образом можно сразу использовать константу-структуру?

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 01.12.2009 (Вт) 19:27

если ты имеешь ввиду, что данные из константы-строки можно сразу явно записать в структуру, то это ты извращенец, т.к. ты ещё не получил сам CLASSID_NetworkAdapter из реестра. Или ты хочешь сказать, что его значение всегда одно и то же? Почему тогда у меня нет его в реестре?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Список сетевых подключений

Сообщение Хакер » 01.12.2009 (Вт) 19:41

Я не знаю, что такое CLASSID_NetworkAdapter, (намеренно не хочу знать), я смотрю в твой код и смотрю, что ты хочешь сделать. Ты хочешь константное строковое представление числа конвертировать в число. Это глупо, потому что можно сразу использовать число-константу.

А извращенец ты не потому, что пытаешься сделать вышесказанное, а по той причине, что у тебя аргумент в функции объявлен ByVal As String, а ты (какого-то черта) передаёшь результат работы функции StrPtr.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 01.12.2009 (Вт) 20:08

я взял код из инета. Да и вообще, как не передавай, не работает. Проверял. Хм, строку в реестре нашёл. Ты считаешь извращением использовать спец. ф-ю вместо того, чтобы делить строку на кучу частей и прописывать вручную значение каждому члену структуры???

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Список сетевых подключений

Сообщение Хакер » 01.12.2009 (Вт) 21:23

Ты считаешь извращением использовать спец. ф-ю вместо того, чтобы делить строку на кучу частей и прописывать вручную значение каждому члену структуры???

Функция сделает то же самое. Я считаю глупостью делать в рантайме вычисления, которые можно сделать в уме до компиляции.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 01.12.2009 (Вт) 21:34

с таким программингом можно программить до седых волос. А может, ты ещё знаешь, в каком формате записана строка? Где старшие байты, где младшие?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Список сетевых подключений

Сообщение Хакер » 01.12.2009 (Вт) 21:54

Space писал(а):я взял код из инета. Да и вообще, как не передавай, не работает.

А просто не надо тырить код из интернета и хныкать, что он не работает. Надо читать документацию. Читать документацию. Читать документацию. Читать документаци. Документацию читать, а также читать документацию.

В документации по CLSIDFromString сказано, что функция ждёт указатель на OLESTR (он же BSTR).
В документации по OLESTR (BSTR) сказано, что это такое.
В статьях о VB сказано, что все строки внутри хранятся именно в этом формате.
В статьях по Declare Function сказано, что при вызове все строки из BSTR конвертируются ASCIIZ-строк, и что нет способа повлиять на (отключить) это поведение.

Тяжело для мозга, да, сопоставить 4 этих факта, чтобы понять, что Declare не самый хороший способ объявить эту функцию, и что лучше всего использовать TLB? Тем более, что это OLE-функция, и есть готовый olelib.tlb.

А может, ты ещё знаешь, в каком формате записана строка? Где старшие байты, где младшие?

Я-то, конечно, знаю. Но если ты не знаешь, тяжело прочитать документацию по гуидам? А я бы и документацию искать/читать не стал, я бы исходя из того, что функция работает строго в соответствии с документацией (и никак иначе), подсунул бы ей тестово-маркерную строчку (dead4fee-fade-face-и-т-д} а потом посмотрел бы, во что сконвертировалось, и на основании этого определил бы, где старшие, где младшие. Это всё 10 секунд. Это всё в тысячу раз быстрее, чем потратил ты времени на создание топиков и выяснение этого вопроса.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 01.12.2009 (Вт) 22:10

всё-таки бы ты заюзал функцию? А говоришь, Йа-йа... Сразу бы константу-структуру использовал... Извращенец. Использовал бы функцию, чтобы прописать РУКАМИ константу-структуру, ещё и гонял бы тестовый проект :) Кстати, если ты не знал, так работает:
Код: Выделить всё
Private Declare Function CLSIDFromString Lib "ole32" (ByVal lpsz As Any, pclsid As Any) As Long
lRet = CLSIDFromString(StrPtr(CLASSID_NetworkAdapter), Gd)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Список сетевых подключений

Сообщение Хакер » 01.12.2009 (Вт) 22:15

Space, ты адекватен?
Судя по этому потоку сознания:
А говоришь, Йа-йа... Сразу бы константу-структуру использовал... Извращенец.

ты не совсем адекватен.

Я бы не использовал функцию в программе, для тех целей, для которых используешь её ты. Если бы я и использовал её, то только однократно и исключительно для того, чтобы узнать правила текстового представления гуида.

Тот код, который «кстати работает», о чём, по-твоему, я не знал, к твоему сведению, отстоен до посинения.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 01.12.2009 (Вт) 22:30

что ты в нём уже нашёл отстойного?
Люди!... Переведите, плиз, этот код на язык API:
viewtopic.php?f=1&t=41065&p=6733542#p6733489

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Список сетевых подключений

Сообщение Хакер » 01.12.2009 (Вт) 22:46

Объявления As Any совершенно не обеспечивают типобезопасность. Для первого параметра это простительно, для второго это совершенно ненужно. StrPtr бесполезен, лишняя пара SysAllocString/SysFreeString (потому что указатель на константу ты никогда не получишь, создаётся копия константы и передаётся указатель на копию). Это всё решается использование нормально (через TLB) объявленной функции.

А при условии константности указанного CLSID-а, код отстоен ещё и тем, что заведомо известное 128-битное число вычисляется из константной строки, вместо того, чтобы быть числовой констатной.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 01.12.2009 (Вт) 22:54

А при условии константности указанного CLSID-а, код отстоен ещё и тем, что заведомо известное 128-битное число вычисляется из константной строки, вместо того, чтобы быть числовой констатной.
Ой, Хакер, перегрев проца и выход из строя компутера.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 01.12.2009 (Вт) 23:35

как теперь получить имя сетевого соединения, связанного с устройством?
http://pblog.ru/?p=105

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Список сетевых подключений

Сообщение Space » 03.12.2009 (Чт) 1:30

мда... а Enable/Disable адаптера в WMI доступно только с Vista!!! :evil:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Mail.ru [бот] и гости: 21

    TopList