Страницы: 1
RSS
Как средствами VBA получать информацию о состоянии Windows
 
Здравствуйте!  
 
Подскажите, пожалуйста, как можно решить задачу контроля в файле Excel состояния сетевого подключения компьютера (компьютер включен в локальную сеть)? Т.е. если сеть включена, то в определенную ячейку вводиться «1», если сеть отключена то «0».
 
А как проверить, что "компьютер включен в локальную сеть"?  
 
Достаточно, чтобы к сетевой карте компа было что-то подключено?  
Или надо распознать наличие соединения с определёнными компами?  
 
Я бы выбрал второй вариант - в таких случаях проверяю наличие пинга до нужного компьютера.  
 
Если надо, выложу файл, в котором в ячейках работают формулы типа =PING("192.168.1.4")  
(формула возвращает 0 или 1 в зависимости от доступности узла)  
 
Можно проверить и состояние сетевой карты, но это будет посложнее.
 
{quote}{login=EducatedFool}{date=28.09.2009 04:54}{thema=}{post}А как проверить, что "компьютер включен в локальную сеть"?  
 
Достаточно, чтобы к сетевой карте компа было что-то подключено?  
Или надо распознать наличие соединения с определёнными компами?  
 
Я бы выбрал второй вариант - в таких случаях проверяю наличие пинга до нужного компьютера.  
 
Если надо, выложу файл, в котором в ячейках работают формулы типа =PING("192.168.1.4")  
(формула возвращает 0 или 1 в зависимости от доступности узла)  
 
Можно проверить и состояние сетевой карты, но это будет посложнее.{/post}{/quote}  
 
Будьте добры, выложите пожалуйста пример (второй вариант).    
И вопрос по второму варианту, как долго идет PING?
 
Вот пример файла, который при открытии проверяет доступность указанных IP-адресов:    
http://excelvba.ru/XL_Files/Sample__28-09-2009__7-05-42.zip  
(файл будет работать далеко не у всех)  
 
 
 
А вот и обещанный файл: http://excelvba.ru/XL_Files/Sample__28-09-2009__7-12-50.zip  
 
В нём доступны формулы типа этих:  
=pingb(A1)  
' возвращает TRUE, если пинг прошёл удачно  
 
=PingEx(A2)  
' возвращает время прохождения пакета в миллисекундах  
 
=InternetConnectionAvailable()  
' возвращает TRUE, если доступно соединение с Интернетом (пингуются несколько хостов)
 
{quote}{login=EducatedFool}{date=28.09.2009 05:09}{thema=}{post}Вот пример файла, который при открытии проверяет доступность указанных IP-адресов:    
http://excelvba.ru/XL_Files/Sample__28-09-2009__7-05-42.zip  
(файл будет работать далеко не у всех)  
 
 
 
А вот и обещанный файл: http://excelvba.ru/XL_Files/Sample__28-09-2009__7-12-50.zip  
 
В нём доступны формулы типа этих:  
=pingb(A1)  
' возвращает TRUE, если пинг прошёл удачно  
 
=PingEx(A2)  
' возвращает время прохождения пакета в миллисекундах  
 
=InternetConnectionAvailable()  
' возвращает TRUE, если доступно соединение с Интернетом (пингуются несколько хостов){/post}{/quote}  
 
Пребольшущие спасибо!  
 
Еще один вопросик. Можно ли средствами VBA распознать к примеру открыт ли проводник Windows или закрыт?
 
> И вопрос по второму варианту, как долго идет PING?  
 
Если пинг прошёл, то после первого успешного пакета выводится результат.  
Если пинг не проходит, производится несколько попыток (в данном примере - 3)  
 
Пинг работает раз в 10 быстрее, чем при помощи встроенной в Винду программы ping.exe (в ней есть таймауты. в моём варианте таймаутов нет)
 
> Можно ли средствами VBA распознать к примеру открыт ли проводник Windows или закрыт?  
 
Да, можно. (используя WinAPI, можно сделать всё, что угодно)  
В цикле перебираем все открытые окна, и проверяем их заголовки.
 
{quote}{login=EducatedFool}{date=28.09.2009 05:14}{thema=}{post}> Можно ли средствами VBA распознать к примеру открыт ли проводник Windows или закрыт?  
 
Да, можно. (используя WinAPI, можно сделать всё, что угодно)  
В цикле перебираем все открытые окна, и проверяем их заголовки.{/post}{/quote}  
 
Спасибо, попробую разобраться с этой функцией, главное наметка есть.
 
Вообще, проверить наличие запущенного приложения можно гораздо проще:  
 
Sub test2()  
   On Error Resume Next:    x = GetObject(, "word.application")  
   If Err Then MsgBox "Word не запущен!" Else MsgBox "Word запущен!"  
End Sub  
 
Как-то аналогично, скорее всего, можно проверить наличие запущенного Explorer-a:  
(такой код не работает, поскольку я не знаю, какой тип указывать)  
 
Sub test()  
   On Error Resume Next  
   x = GetObject(, "ExploreWClass")  
   If Err Then MsgBox "Проводник не запущен!" Else MsgBox "Проводник запущен!"  
End Sub
 
{quote}{login=EducatedFool}{date=28.09.2009 05:32}{thema=}{post}Вообще, проверить наличие запущенного приложения можно гораздо проще:  
 
Sub test2()  
   On Error Resume Next:    x = GetObject(, "word.application")  
   If Err Then MsgBox "Word не запущен!" Else MsgBox "Word запущен!"  
End Sub  
 
Как-то аналогично, скорее всего, можно проверить наличие запущенного Explorer-a:  
(такой код не работает, поскольку я не знаю, какой тип указывать)  
 
Sub test()  
   On Error Resume Next  
   x = GetObject(, "ExploreWClass")  
   If Err Then MsgBox "Проводник не запущен!" Else MsgBox "Проводник запущен!"  
End Sub{/post}{/quote}  
 
Спасибо, проверил с Word-ом OK все получается, а вот с проводником нет. Проводник открыт а пишет что "не запущен".
Страницы: 1
Читают тему
Наверх