Снова точная температура CPU на VB6

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Megasvarshik
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 17.02.2022 (Чт) 12:08

Снова точная температура CPU на VB6

Сообщение Megasvarshik » 17.02.2022 (Чт) 12:45

Приветствую!
Очень давно не заходил на VBStreets настолько, что VB6 устарел капитально, а я забыл почти все :scratch:

Поиск мне не помог. WMI ничего хорошего не выдаст и не на каждой машине работает, это я понял...
На VB.NET нашел ближайший код через библиотеку OpenHardwareMonitorLib.dll
https://stackoverflow.com/questions/317 ... onitor-dll

Вопросов пару: как правильно подключить к проекту OpenHardwareMonitorLib.dll и поправить код получения температуры под VB6. Планирую минимальными кодами инспектировать температуру процессора, например с близкими значениями AIDA64 и тп. Если коды не большие, возможно и температуру графического процессора.

Пример на vb.net по ссылке выше:
Код: Выделить всё
Dim cpu = cp.Hardware.Where(Function(h) h.HardwareType = HardwareType.CPU).FirstOrDefault()
        cpu.Update()
        For i As Integer = 0 To cp.Hardware.Count() - 1
            Dim hw = cp.Hardware(i)
            Select Case hw.HardwareType
            Case HardwareType.CPU
            Dim sensor = hw.Sensors(5) 'AVERAGE CPU TEMPERATURE
            CPUTemp = sensor.Value
            End Select
        Next

Дополнительный пример получения информации о температуре CPU в режиме реального времени на VB.NET:
Код: Выделить всё
Imports System
Imports System.Management
Imports OpenHardwareMonitor
Imports OpenHardwareMonitor.Hardware

Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Timer1.Enabled = True
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Dim computer As New Computer()
    computer.Open()
    computer.CPUEnabled = True

    Dim cpu = computer.Hardware.Where(Function(h) h.HardwareType = HardwareType.CPU).FirstOrDefault()

    If cpu IsNot Nothing Then
        cpu.Update()

        Dim tempSensors = cpu.Sensors.Where(Function(s) s.SensorType = SensorType.Temperature)

        Label1.Text = tempSensors.ToList.Item(0).Value
        Label2.Text = tempSensors.ToList.Item(1).Value
        MetroProgressSpinner1.Value = Label1.Text
        MetroProgressSpinner2.Value = Label2.Text
    End If
End Sub

End Class

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

Re: Снова точная температура CPU на VB6

Сообщение Хакер » 18.02.2022 (Пт) 6:23

Библиотека опенсорсная, если лицензия позволяет, можно подправить библиотеки, сделав её COM-библиотекой, а затем её легко подключить к VB6-проекту.

Но я бы просто посмотрел в код библиотеки, как она работает с датчиками, и сделал аналогично.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Megasvarshik
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 17.02.2022 (Чт) 12:08

Re: Снова точная температура CPU на VB6

Сообщение Megasvarshik » 18.02.2022 (Пт) 10:33

Насколько я понял OpenHardwareMonitorLib написан на С - https://github.com/openhardwaremonitor/ ... aremonitor
Где и что мне там искать не понятно(с наскока сделать на чужом языке и коде, больше на сказку похоже). Да и я далек от создания библиотек, только ЕХЕшники всегда делал, максимум с WinAPI и то последнее, что делал наверное лет 15-17 может больше назад. Думал найти готовую DLL и подключив использовать по аналогии, например с:

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long)

Кстати про эту DLL, она не устанавливается даже в винде(10х64) через regsvr32 :)
DLL_err.jpg
DLL_err.jpg (47.26 Кб) Просмотров: 2031

Неужели за это время никто на VB не измерял температуру CPU?

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

Re: Снова точная температура CPU на VB6

Сообщение Хакер » 18.02.2022 (Пт) 12:33

Megasvarshik писал(а):Насколько я понял OpenHardwareMonitorLib написан на С

Не на Си, а на Си-Шарпе (C#) — это совершенно разные языки, общего между ними только унаследованный фигурно-скобочный синтаксис.

Megasvarshik писал(а):Кстати про эту DLL, она не устанавливается даже в винде(10х64) через regsvr32

Нет такого понятия «установка DLL» — это нонсенс. regsvr32 это утилита по регистрации ActiveX-сервера (который может быть и в EXE и DLL) в реестре, причём в случае DLL работа regsvr32 заключается в том, чтобы просто дёрнуть из DLL-библиотеки экспортируемую функцию DllRegisterServer.
Поскольку OpenHardwareMonitorLib не является ActiveX-библиотекой, то и DllRegisterServer она не эспортирует.

Megasvarshik писал(а):Неужели за это время никто на VB не измерял температуру CPU?

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

Megasvarshik
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 17.02.2022 (Чт) 12:08

Re: Снова точная температура CPU на VB6

Сообщение Megasvarshik » 18.02.2022 (Пт) 13:59

Хакер писал(а):ет такого понятия «установка DLL» — это нонсенс. regsvr32 это утилита по регистрации ActiveX-сервера (который может быть и в EXE и DLL) в реестре, причём в случае DLL работа regsvr32 заключается в том, чтобы просто дёрнуть из DLL-библиотеки экспортируемую функцию DllRegisterServer.
Поскольку OpenHardwareMonitorLib не является ActiveX-библиотекой, то и DllRegisterServer она не эспортирует.


Те по этой причине DLLка просто должна быть в папке с программой(проектом), выходит так?

Хакер писал(а):По-моему на форуме полно топиков на этот счёт было. Надо лучше пользоваться поиском.

Вот ни одного не находил рабочего решения/примера на VB(не NET). Все либо про скрипты типа WMI, которые работают примерно также точно, как надпись на заборе :D (/namespace:\\root\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature)да хоть из CMD.EXE, либо на других языках. Действительно работающие варианты я так понимаю на отдельных DLL, но и те не подходят для "обычного" VB

Вот это работать не будет.(Вернее будет, но выдавать не понятные и одинаковые параметры, ровно так же, как и через cmd)

Dim strComputer As String, S As Object, WMI As Object, I As Object
strComputer = "."
Set WMI = GetObject("winmgmts:\\" & strComputer & "\root\WMI")
Set S = WMI.ExecQuery("Select * from MSAcpi_ThermalZoneTemperature")
For Each I In S
MsgBox (I.CurrentTemperature - 2732) / 10

Next

Добавлю еще: попалось, разбирают эту библиотеку с исходниками.
Но легче от этого не стало, наверное даже усложнилось (я библиотеку то подключить не могу =)
https://question-it.com/questions/12670 ... ro-otdelno

И еще это - https://programmersought.com/article/31182715676/
Для меня, как далекого от этого, вижу только общее WinRing0x64.dll, WinRing0.dll и Ring0. А что с этим делать, не представляю.

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Снова точная температура CPU на VB6

Сообщение Adam Smith » 04.03.2022 (Пт) 13:46

Мне тоже понадобилось регулярно контролировать
Megasvarshik писал(а):Вот это работать не будет.(Вернее будет, но выдавать не понятные и одинаковые параметры, ровно так же, как и через cmd)

В Windows 10 Pro 19043.1526 у меня НЕ работает через WMI.
Может есть какая-то консольная утилитка, чтобы сохраняла текущую температуру на момент запуска?

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Снова точная температура CPU на VB6

Сообщение Adam Smith » 09.03.2022 (Ср) 12:02

Megasvarshik писал(а):я библиотеку то подключить не могу =)
Получилось? Где-то я пролетал мимо декларации этой либы, к сожалению пока не нахожу.
Там по-моему ещё структура данных использовалась.
Нарыл консольную OpenHardwareMonitorReport.exe, но и она не выдала температур:
C:\Users\User\Downloads>OpenHardwareMonitorReport

Open Hardware Monitor Report

--------------------------------------------------------------------------------

Version: 0.8.0.0

--------------------------------------------------------------------------------

Common Language Runtime: 2.0.50727.9151
Operating System: Microsoft Windows NT 6.2.9200.0
Process Type: 64-Bit

--------------------------------------------------------------------------------

Sensors

--------------------------------------------------------------------------------

Parameters

C:\Users\User\Downloads>

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Снова точная температура CPU на VB6

Сообщение Adam Smith » 10.03.2022 (Чт) 15:50

Есть кошерные GUI утилиты https://www.cpuid.com/downloads/hwmonitor/hwmonitor_1.45.zip из них нужно дёрнуть значения к себе.
Megasvarshik в ближайшие выходные я копипастой попробую сделать .NET консольную утилиту копирования текстов из SysTreeView32 в StdOut.
Чтоб она проверяла наличие админки, запускала HWMonitor_x32.exe и делала то, что задумано. Костыль лютый, но ничего не поделаешь.
На VB6 я не нашел примеров копирования текста из TreeView с помощью API. Многие сайты оказывается протухли за прошедшие годы.

Круто было бы скопировать SysTreeView32 из HWMonitor_x32 в свои скрытые List'ы и выдавать текст сразу в CSV формате.

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: Снова точная температура CPU на VB6

Сообщение bon818 » 11.03.2022 (Пт) 5:03

Adam Smith писал(а):На VB6 я не нашел примеров копирования текста из TreeView с помощью API. Многие сайты оказывается протухли за прошедшие годы.
Круто было бы скопировать SysTreeView32 из HWMonitor_x32 в свои скрытые List'ы и выдавать текст сразу в CSV формате.


APIWIN32 СТР.ПОИСКА vb6 + TVM_GETITEM

Нашлось:
Подскажите, как извлечь информацию из окна класса (уточню - другого процесса)
https://forum.vingrad.ru/topic-15602.html

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Снова точная температура CPU на VB6

Сообщение Adam Smith » 11.03.2022 (Пт) 9:31

Не удается открыть эту страницу
Отказано в подключении к сайту forum.vingrad.ru.

прочитал таки, получается копировать тоже не вариант
если не получится в .Net то можно и скриншоты брать

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Re: Снова точная температура CPU на VB6

Сообщение ALX_2002 » 06.11.2022 (Вс) 17:09

Хм. Тема старая, но наткнулся только сейчас. Почитал - удивился. Софтина же предоставляет свои данные как минимум в виде WMI провайдера и HTTP сервера, отдающего JSON. Зачем при этом делать забирание данных из окна ? :shock:

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Снова точная температура CPU на VB6

Сообщение Adam Smith » 08.11.2022 (Вт) 11:06

Спасибо за внимание к теме

Я не докопался до этой глубины, а просто накопал в Интернете активные HWMonitor PRO v.1.40.0
которые умеют слушать порт, подключиться по сети и соответственно отдают инфу на мой комп
отпала необходимость изобретать велосипед

Можно было бы заморочиться написать себе монитор\мэйлер с уставками макс.значений,
чтобы писал лог по времени и писал мне письма когда это надо, но нет необходимости.

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Снова точная температура CPU на VB6

Сообщение Adam Smith » 08.11.2022 (Вт) 11:08

ALX_2002 писал(а):Хм. Тема старая, но наткнулся только сейчас. Почитал - удивился. Софтина же предоставляет свои данные как минимум в виде WMI провайдера и HTTP сервера, отдающего JSON. Зачем при этом делать забирание данных из окна ? :shock:

Кстати, для науки полезны были бы примеры WMI или ссылка на них.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Re: Снова точная температура CPU на VB6

Сообщение ALX_2002 » 10.11.2022 (Чт) 20:42

Adam Smith писал(а):
ALX_2002 писал(а):Хм. Тема старая, но наткнулся только сейчас. Почитал - удивился. Софтина же предоставляет свои данные как минимум в виде WMI провайдера и HTTP сервера, отдающего JSON. Зачем при этом делать забирание данных из окна ? :shock:

Кстати, для науки полезны были бы примеры WMI или ссылка на них.


Ох давно не брал я карты в руки. Слепил на скорую руку в VBS.

Код: Выделить всё
Option Explicit

Dim oSWbemServicesEx, oSWbemObjectEx
Set oSWbemServicesEx = GetObject("winmgmts:root\OpenHardwareMonitor")
For Each oSWbemObjectEx in oSWbemServicesEx.ExecQuery("SELECT * FROM Sensor")
   WSH.Echo("Name:" & oSWbemObjectEx.Name)
   WSH.Echo("Type:" & oSWbemObjectEx.SensorType)
   WSH.Echo("Value:" & oSWbemObjectEx.Value & vbCrlf)
Next


Пример для готового запуска в аттаче. Запускать через test.cmd
Вложения
test.zip
(465 байт) Скачиваний: 55

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Снова точная температура CPU на VB6

Сообщение Adam Smith » 13.03.2023 (Пн) 16:22

Спасибо!

Установил CPUID HWMonitor PRO 1.40.0 и всё равно ошибка
test.vbs(4, 1) (null): 0x8004100E

эта версия видимо без WMI провайдера.

Сконнектился с портом 25021, сервер периодически сыпет, но не понятно в какой кодировке.

Вложения
Результат.png
Результат.png (26.19 Кб) Просмотров: 973

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Re: Снова точная температура CPU на VB6

Сообщение ALX_2002 » 16.03.2023 (Чт) 10:35

Adam Smith писал(а):Установил CPUID HWMonitor PRO 1.40.0 и всё равно ошибка

Боюсь, что мы говорим о разном ПО. Я писал выше о Open Hardware Monitor

1) WMI провайдер доступен когда приложение запущено

2) Так включается веб-сервер
enable_web_server.png
enable_web_server.png (44.82 Кб) Просмотров: 959

по умолчанию, он доступен на порту 8085. JSON данные доступы по адресу http://127.0.0.1:8085/data.json. Если обратиться напрямую, то рисует UI

3) Так выглядят JSON данные
json_data.png


4) Настройка порта
set_port.png
set_port.png (60.55 Кб) Просмотров: 959

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

(решено) Снова точная температура CPU на VB6

Сообщение Adam Smith » 16.03.2023 (Чт) 11:45

По сути ALX_2002 разжевал и предоставил решение.
Не дурно было бы добавить (решено) в имени темы.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Re: Снова точная температура CPU на VB6

Сообщение ALX_2002 » 16.03.2023 (Чт) 12:29

В принципе, в PowerShell / JScript.NET / VBScsript.NET и в NET приложениях можно использовать библиотеку от этой софтины и получать данные не запуская само приложение OpenHardwareMonitor, но это уже другая история... Наверное и на VB6 можно нечто подобное сварганить, но тут я не в курсе. )


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

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

Сейчас этот форум просматривают: Google-бот и гости: 1

    TopList