Orion9

|
Posted: Fri Feb 07, 2025 18:45 Post subject: |
|
|
AkulaBig wrote: | Ну сам-то я последний скрипт тоже на au3 переписал. |
Да, я помню, что вы хотите, чтобы везде работало, включая WinPE.
AkulaBig wrote: | Так что придется потрудиться. |
Важно отметить, что этот труд больше увлекает, чем надоедает Когда я делал, в Autorun ещё много не было из того, что появилось в последних версиях. Сейчас один объект List чего стоит (кстати, в последнем примере я забыл освободить объекты List через Free). И это если ещё не говорить об объекте WMIQuery, который тоже может помочь развернуться не на шутку.
Три примера в отдельном модуле, на случай, если будут нужны ещё какие-то идеи:
 WMI.aucfg Code: | Pragma IncludeOnce
Global Ping3_Thread = 0, P3_MousePosX = 0, P3_MousePosY = 0
# вызов Alt + "-"
#SetHotkeyAction /K:A /V:189 WmiTcpipTest
# коды вызова из кнопок
RegisterCommand 80003 "PingThree"
RegisterCommand 80004 "WmiTcpipTest"
RegisterCommand 80005 "GetDriverList"
Func PingThree(lParam)
If Ping3_Thread > 0 Then
Ping3_Thread = 0
Else
Ping3_Thread = 1
# прямой вызов WmiPing по коду не работает
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"
# приводит к ошибке Autorun
pq1 = '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)
MouseGetPos("P3_MousePosX", "P3_MousePosY")
ShowPingHint("Pinging started")
While Ping3_Thread > 0
out = ''
wq.Query(pq)
If IsPressed (0x1B) Then Break
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(StrTrim(out))
If IsPressed (0x1B) Then Break
#Sleep(1000)
Wend
ShowPingHint("Pinging stoped")
Free(wq)
EndFunc
Func GetPingStatus(StatusCode)
If StatusCode = 0 Then
Return "OK"
Else
Return "##"
Endif
EndFunc
Func ShowPingHint(PingHint)
# формат подсказки
SetHintParam("ShowHint", "Font", 10, "Consolas")
SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
#SetHintParam("ShowHint", "Frame", 0xFFFFFF)
ShowHint(PingHint, P3_MousePosX, P3_MousePosY)
For i = 1 To 20
#If IsPressed (0x1B) Then Break
Sleep(50)
Next
#WinSetState(23)
SetHintParam("ShowHint", "Reload")
EndFunc
Func WmiTcpipTest()
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
Func GetDriverList()
Local Outstr
Local wq = WMIQuery()
wq.Query('SELECT * FROM Win32_SystemDriver')
While wq.Next()
Outstr = Outstr & wq.GetValue("Caption") & " | " & wq.GetValue("Name") & auCRLF
Wend
Free(wq)
Return MsgBox(Outstr)
EndFunc
|
Ну и в цикле можно переодически вызывать au3-скрипт, который в фоне может принести что угодно и откуда угодно ) |
|