Работа с процессором и оперативной памятью в VB6 (13.08.2012). Печать
2012 - Август
13.08.2012 18:49
Save & Share

Оказалось, не все так сложно. Опять пришлось повозиться с API, потому что справки MSDN недостаточно.

Чтобы начать работать с процессорами, получить их текущую загруженность - нужно сделать следующее:

Dim cpus As Object, cpu As Object
Set cpus = GetObject("winmgmts:").InstancesOf("Win32_Processor")

For Each cpu In cpus
    MsgBox cpu.LoadPercentage
Next

Для меня загадка, где описываются подробно свойства объекта CPU, но мне хватило такого свойства для моей задачи.

Чтобы начать работать с памятью, с ее свойствами - нужно сделать следующее:

Private Declare Sub GlobalMemoryStatusEx Lib "kernel32" (lpBuffer As MEMORYSTATUSEX) 

Private Type INT64
   LoPart As Long
   HiPart As Long
End Type

Private Type MEMORYSTATUSEX 'Эти свойства используются для получения информации о RAM.
   dwLength As Long
   dwMemoryLoad As Long
   ulTotalPhys As INT64
   ulAvailPhys As INT64
   ulTotalPageFile As INT64
   ulAvailPageFile As INT64
   ulTotalVirtual As INT64
   ulAvailVirtual As INT64
   ulAvailExtendedVirtual As INT64
End Type

Dim udtMemStatEx As MEMORYSTATUSEX

udtMemStatEx.dwLength = Len(udtMemStatEx)
Call GlobalMemoryStatusEx(udtMemStatEx)

'Получаем загруженность памяти в процентах:
Me.Print "Memory Load" + vbTab + CStr(udtMemStatEx.dwMemoryLoad) + "%"

(добавлено 14.08.2012): другой способ по работе с процессором пришлось выбрать, т.к. первичный вызывал затормаживание работы программы чуть ли не на секунду: чтобы обновлять показания ЦП, нужно постоянно вызывать "Set cpus = GetObject("winmgmts:").InstancesOf("Win32_Processor")". Новый способ универсален и поможет вам как с процессором, так и с памятью, так и с кучей всего остального; многофункциональность огромная. Однако, в интернете про этот способ почти ничего нет.

В VB6, в компонентах Проекта есть пункт "System Monitor Control" (sysmon.ocx). Добавляете его в проект, на форму (большого размера), запускаете проект и играетесь в создании счетчиков на этом элементе своими руками. Наигравшись, вы поймете, что получить процент загруженности процессора можно таким способом:

SystemMonitor1.Counters.Add "\\" & ComputerName & "\Процессор(_Total)\% загруженности процессора", где ComputerName - имя вашего компьютера. Его в свою очередь можно получить так:

Private Declare Function GetComputerNameA Lib "kernel32" (ByVal lpBuffer As String, nSize As Long) As Long

Dim ComputerName As String * 255
If GetComputerNameA(ComputerName, 255&) <> 0 Then ComputerName = Left$(ComputerName, InStr(ComputerName, vbNullChar) - 1)

Получить же значение программно созданного счетчика можно таким способом, нумерация идет с единицы:

MsgBox SystemMonitor1.Counters.Item(1).Value

Однако стоит учесть, что в Windows нерусифицированной могут возникнуть трудности, т.к. будет преобразование строки "Процессор(_Total)\% загруженности процессора".

Обновлено ( 14.08.2012 20:30 )