Orion9

|
Posted: Tue Nov 19, 2024 14:02 Post subject: |
|
|
Пара примеров на WMI Object!
 Hidden text Code: | Pragma IncludeOnce
# вызов по Alt + "-"
SetHotkeyAction /K:A /V:189 WmiTcpip
# код для вызова из кнопки
RegisterCommand 70003 "PingThree"
Static Ping3_Thread = 0
Func WmiTcpip()
Local Outstr
Local wq = WMIQuery()
While 1
wq.Query('select * from Win32_PerfFormattedData_Tcpip_NetworkInterface')
#wq.Query('select * from Win32_PerfRawData_Tcpip_NetworkInterface')
wq.Next()
Outstr = wq.GetValue("BytesReceivedPersec") & " / " & wq.GetValue("BytesSentPersec")
If IsPressed (0x1B) Then Break
ShowHint(Outstr)
sleep(500)
WinSetState(23)
If IsPressed (0x1B) Then
Break
Endif
Wend
Free(wq)
EndFunc
# обертка для потока
# прямой вызов WmiPing по коду 70003 работать не будет
Func PingThree(lParam)
if Ping3_Thread > 0 then
Ping3_Thread = 0
else
Ping3_Thread = 1
RunThread WmiPing
endif
EndFunc
Func WmiPing()
Local out
Local wq = WMIQuery(), pa1, pa2, pa3, pq
pa1 = "192.168.1.1"
pa2 = "192.168.1.2"
pa3 = "wincmd.ru"
pq = 'SELECT Address, ResponseTime, ResponseTimeToLive, StatusCode FROM Win32_PingStatus _
WHERE BufferSize = 32 AND Timeout = 1000 AND (Address = "' & pa1 & '" _
OR Address = "' & pa2 & '" OR Address = "' & pa3 & '")'
pq = "SELECT Address, ResponseTime, ResponseTimeToLive, StatusCode FROM Win32_PingStatus _
WHERE BufferSize = 32 AND Timeout = 1000 AND (Address = '" & pa1 & "' _
OR Address = '" & pa2 & "' OR Address = '" & pa3 & "')"
OutputDebugString(pq)
ShowPingHint("Pinging started")
While Ping3_Thread > 0
out = ''
wq.Query(pq)
While wq.Next()
out = out & "Ping " & wq.GetValue("Address") & " " & GetPingStatus(wq.GetValue("StatusCode")) _
& " ResponseTime " & wq.GetValue("ResponseTime") & " TTL " & wq.GetValue("ResponseTimeToLive") & auCRLF
If IsPressed (0x1B) Then Break
Wend
If IsPressed (0x1B) Then Break
ShowPingHint(out)
If IsPressed (0x1B) Then Break
Wend
ShowPingHint("Pinging stoped")
Free(wq)
EndFunc
Func GetPingStatus(StatusCode)
If StatusCode = 0 Then
Return "OK"
Else
Return "Fail"
Endif
EndFunc
Func ShowPingHint(PingHint)
SetHintParam("ShowHint", "Font", 10, "Consolas")
SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
SetHintParam("ShowHint", "Frame", 0xFFFFFF)
ShowHint(PingHint)
Sleep(1000)
WinSetState(23)
SetHintParam("ShowHint", "Reload")
EndFunc |
В первом примере жмите на ESC почаще, чтобы выйти - этот пример менее проработан - он чисто для демонстрации.) Пример рабочий, но для получения информации по скорости передачи по сети лучше использовать родную функцию Autorun - GetNetInterfaceInfo.
Второй пример - для кнопки. Запуск пинга сразу трёх адресов и показа статуса операции. С форматом вывода не заморачивался, но и так смотрится неплохо. Выход из цикла - ESC или повторное нажатие на кнопку.
Loopback
Спасибо за функционал - он просто шикарен!
Заметил только, что строка запроса ругается на двойные кавычки, пришлось брать запрос в одиночные, т.е. строка вида:
Code: | SELECT ResponseTime, ResponseTimeToLive, StatusCode FROM Win32_PingStatus WHERE BufferSize = 32 AND Timeout = 1000 AND (Address = "192.168.1.1" OR Address = "192.168.1.2" OR Address = "wincmd.ru")
|
Работает только:
Code: | SELECT ResponseTime, ResponseTimeToLive, StatusCode FROM Win32_PingStatus WHERE BufferSize = 32 AND Timeout = 1000 AND (Address = '192.168.1.1' OR Address = '192.168.1.2' OR Address = 'wincmd.ru') |
|
|