Работа с процессором и оперативной памятью в VB6 (13.08.2012). |
![]() |
2012 - Август | |||
13.08.2012 18:49 | |||
Оказалось, не все так сложно. Опять пришлось повозиться с API, потому что справки MSDN недостаточно. Чтобы начать работать с процессорами, получить их текущую загруженность - нужно сделать следующее: Dim cpus As Object, cpu As Object For Each cpu In cpus Для меня загадка, где описываются подробно свойства объекта CPU, но мне хватило такого свойства для моей задачи. Чтобы начать работать с памятью, с ее свойствами - нужно сделать следующее: Private Declare Sub GlobalMemoryStatusEx Lib "kernel32" (lpBuffer As MEMORYSTATUSEX) Private Type INT64 Private Type MEMORYSTATUSEX 'Эти свойства используются для получения информации о RAM. Dim udtMemStatEx As MEMORYSTATUSEX udtMemStatEx.dwLength = Len(udtMemStatEx) 'Получаем загруженность памяти в процентах: (добавлено 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 Получить же значение программно созданного счетчика можно таким способом, нумерация идет с единицы: MsgBox SystemMonitor1.Counters.Item(1).Value Однако стоит учесть, что в Windows нерусифицированной могут возникнуть трудности, т.к. будет преобразование строки "Процессор(_Total)\% загруженности процессора". |
|||
Обновлено ( 14.08.2012 20:30 ) |