Orion9

|
Posted: Fri Jan 02, 2026 20:42 Post subject: |
|
|
FallenAngel
Если я понял, функция GetNetSpeed была взята из справки. Я ее приложил в модуль, т.ч. можете удалить ее у себя, чтобы не было конфликта имен. Просто подключите новый модуль к конфигурации.
 InfoHeader.aucfg | Code: | ControlSetMouseAction /L /K:S /H:2 0 ToggleInfoHeader
Sleep(200)
Global gTitle = WinGetText(), gInfoHeader = gTitle, gShowTitle = 1, gTitleThread = 0
LaunchInfoHeader()
SetMessageAction 70 "SetInfoHeader"
Func ToggleInfoHeader()
gShowTitle = Not gShowTitle
IniWrite %COMMANDER_INI% "Autorun" "ShowTitle" %"gShowTitle"
Sleep(100)
LaunchInfoHeader()
EndFunc
Func SetInfoHeader()
WinSetText(gShowTitle ? gInfoHeader : gTitle)
EndFunc
Func LaunchInfoHeader()
IniRead gShowTitle %COMMANDER_INI% "Autorun" "ShowTitle" 1
If gShowTitle And Not gTitleThread Then
gInfoHeader = gTitle & ' ' & "Booting..."
WinSetText(gInfoHeader)
Sleep(200)
RunThread InfoHeader
EndIf
EndFunc
Func InfoHeader
Local nRecvSpeed, nSendSpeed, T1
gTitleThread = 1
While gShowTitle
T1 = GetUptime()
GetNetSpeed(nRecvSpeed, nSendSpeed)
gInfoHeader = gTitle & ' ' & Date("d MMMM, ddd") & '. CPU: ' & StrFormat("%02d", GetCPUUsage()) & '% RAM: ' & GetMemStats() & '% NET: ↓ ' & Round(nRecvSpeed / 1000, 1) & ' ↑ ' & Round(nSendSpeed / 1000, 1) & ' mb/s'
WinSetText(gInfoHeader)
While GetUptime() < T1 + 1000
If Not gShowTitle Then Break
Sleep(50)
WEnd
Wend
gTitleThread = 0
SetInfoHeader()
EndFunc
Func GetNetSpeed(ByRef nRecvSpeed, ByRef nSendSpeed)
Static nIntfIdx = GetNetInterface()
If nIntfIdx = -1 Then Return
Static nPrevRecv = GetNetInterfaceInfo(nIntfIdx, 'Recv')
Static nPrevSend = GetNetInterfaceInfo(nIntfIdx, 'Sent')
Static nPrevTime = GetUptime()
Local nRecv = GetNetInterfaceInfo(nIntfIdx, 'Recv')
Local nSend = GetNetInterfaceInfo(nIntfIdx, 'Sent')
Local nTime = GetUptime()
Local nTimeDiff = nTime - nPrevTime
nRecvSpeed = Round(Abs(nRecv - nPrevRecv) / nTimeDiff)
nSendSpeed = Round(Abs(nSend - nPrevSend) / nTimeDiff)
nPrevRecv = nRecv
nPrevSend = nSend
nPrevTime = nTime
EndFunc |
Работает?
Надеюсь, что да. А то меня не будет пару дней. Но вы не спешите, подумайте, что еще будет нужно. Когда вернусь, попробуем погоду вставить. Возможно обойдемся простым вызовом URLDownloadToFileW, т.к. он работает, я проверил:
 WttrDownloadTest | Code: | RegisterCommand 60041 "WttrDownloadTest"
Func WttrDownloadTest()
Local url = "https://wttr.in/London?format=3"
Local file = TEMP & "\wttr.txt"
If IsPressed(0x11) Then
tip("Internet connection.", 1, "Urlmon.dll")
hr = DllCall("Urlmon.dll\URLDownloadToFileW", _
"ptr", 0, "wstr", url, "wstr", file, "dword", 0, "ptr", 0, "hresult")
If hr <> 0 Then
txt = "An error occured." & auCRLF & url & auCRLF & _
"Error code: " & hr & auCRLF & GetINetECode(hr)
Return tip(txt, 3)
EndIf
Local txt = FileRead(file)
tip(StrTrim(txt), 1, "Urlmon.dll")
Return
EndIf
If WinInetDownloadFile(url, file) = 0 Then
Local txt = FileRead(file)
tip(StrTrim(txt), 1, "WinInet")
Else
tip("Не удалось получить данные " & url, 3, "Error")
EndIf
EndFunc |
Запуск с CTRL.
На счет листера, пока не знаю. Надо будет у Loopback спросить. Подручными средствами вряд ли получится (т.е. нет готовой команды типа ControlSetMouseAction /L /K:S для окна листера), но он может что-нибудь посоветует. Я тоже потом подумаю. |
|