ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/host/winhost/CUpTime.cls
Revision: 1.1
Committed: Wed Feb 28 09:15:05 2001 UTC (23 years, 8 months ago) by pjm2
Branch: MAIN
CVS Tags: PROJECT_COMPLETION
Log Message:
Some VB class files that are used to return certain information about
the machine they are running on.  I did not write these.  I had to
change a couple of bits to make them work, however.

File Contents

# Content
1 VERSION 1.0 CLASS
2 BEGIN
3 MultiUse = -1 'True
4 Persistable = 0 'NotPersistable
5 DataBindingBehavior = 0 'vbNone
6 DataSourceBehavior = 0 'vbNone
7 MTSTransactionMode = 0 'NotAnMTSObject
8 END
9 Attribute VB_Name = "CUpTime"
10 Attribute VB_GlobalNameSpace = False
11 Attribute VB_Creatable = True
12 Attribute VB_PredeclaredId = False
13 Attribute VB_Exposed = False
14 Option Explicit
15
16 Private Const ERROR_SUCCESS = 0&
17 Private Const PDH_FMT_LARGE = &H400&
18 Private Const REG_DWORD = 4 ' 32-bit number
19 Private Const HKEY_DYN_DATA = &H80000006
20
21 Private Type PDH_FMT_COUNTERVALUE
22 CStatus As Long
23 largeValueLo As Long
24 largeValueHi As Long
25 End Type
26
27 Private Type LARGE_INTEGER
28 lowpart As Long
29 highpart As Long
30 End Type
31
32 Private Declare Function PdhVbOpenQuery Lib "pdh" ( _
33 hQuery As Long) As Long
34
35 Private Declare Function PdhVbAddCounter Lib "pdh" ( _
36 ByVal hQuery As Long, _
37 ByVal szFullCounterPath As String, _
38 hCounter As Long) As Long
39
40 Private Declare Function PdhCollectQueryData Lib "pdh" ( _
41 ByVal hQuery As Long) As Long
42
43 Private Declare Function PdhGetFormattedCounterValue Lib "pdh" ( _
44 ByVal hCounter As Long, _
45 ByVal dwFormat As Long, _
46 lpdwType As Any, _
47 pValue As PDH_FMT_COUNTERVALUE) As Long
48
49 Private Declare Function PdhVbGetDoubleCounterValue Lib "pdh" ( _
50 ByVal CounterHandle As Long, _
51 ByRef CounterStatus As Long) As Double
52
53 Private Declare Function PdhCloseQuery Lib "pdh" ( _
54 ByVal hQuery As Long) As Long
55
56 Private Declare Function PdhVbIsGoodStatus Lib "pdh" ( _
57 ByVal StatusValue As Long) As Long
58
59 Private Declare Function GetVersion Lib "kernel32" () As Long
60
61 Private hPdhQuery As Long, hPdhCounter As Long, hPdhCounterCPU As Long
62 Private sCounterPath As String
63 Private m_sComputerName As String
64 Private m_Win9x As Boolean, m_dMilliSecs As Double, m_iSecs As Integer, m_iMins As Integer, m_iHours As Integer, m_iDays As Integer, m_sCPUTime As String, m_iPercentIdle As Integer
65
66 Public Property Get ComputerName() As String
67 ComputerName = m_sComputerName
68 End Property
69
70 Public Property Let ComputerName(NewComputer As String)
71 m_sComputerName = NewComputer
72 End Property
73
74 Public Property Get isWin9x() As Boolean
75 isWin9x = m_Win9x
76 'isWin9x = True (for debugging purposes)
77 End Property
78
79 Public Property Get MilliSecs() As Double
80 MilliSecs = m_dMilliSecs
81 End Property
82
83 Public Property Get Seconds() As Integer
84 Seconds = m_iSecs
85 End Property
86
87 Public Property Get Minutes() As Integer
88 Minutes = m_iMins
89 End Property
90
91 Public Property Get Hours() As Integer
92 Hours = m_iHours
93 End Property
94
95 Public Property Get Days() As Integer
96 Days = m_iDays
97 End Property
98
99 Public Property Get CPUTime() As String
100 CPUTime = m_sCPUTime
101 End Property
102
103 Public Property Get PercentIdle() As String
104 PercentIdle = m_iPercentIdle
105 End Property
106
107 Public Function Init()
108 On Error GoTo errhandler
109
110 If GetVersion() And &H80000000 Then
111 m_Win9x = True
112 Else
113 m_Win9x = False
114 End If
115
116 If m_Win9x Then Exit Function
117
118 If PdhVbOpenQuery(hPdhQuery) <> ERROR_SUCCESS Then Exit Function
119 ' \\computer\System\System Up Time
120 sCounterPath = "\\" & IIf(Len(m_sComputerName) = 0, ".", m_sComputerName) & "\System\System Up Time"
121
122 If PdhVbAddCounter(hPdhQuery, sCounterPath, hPdhCounter) <> ERROR_SUCCESS Then
123 Exit Function
124 End If
125
126 If PdhVbAddCounter(hPdhQuery, "\Processor(0)\% Processor Time", hPdhCounterCPU) <> ERROR_SUCCESS Then
127 Exit Function
128 End If
129
130 Exit Function
131 errhandler:
132 'msgDialog 1, Err.Description, "Error #" & Err.Number & " - Source: " & Err.Source
133 End Function
134
135 Public Function Unload()
136 Call PdhCloseQuery(hPdhQuery)
137 End Function
138
139 Public Function Capture(Optional GetIdle As Boolean = False) As Boolean
140 On Error GoTo errhandler
141
142 Dim nStatusCode As Long
143 Dim pdhfmtcv As PDH_FMT_COUNTERVALUE
144 Dim pdhStatus As Long
145 Dim dblCounterValue As Double
146 Dim nMsecs As Double
147 Dim lUptime As Double 'Uptime in seconds
148
149 If PdhCollectQueryData(hPdhQuery) <> ERROR_SUCCESS Then
150 Exit Function
151 End If
152
153 nStatusCode = PdhGetFormattedCounterValue(hPdhCounter, PDH_FMT_LARGE, ByVal 0&, pdhfmtcv)
154
155 If nStatusCode <> ERROR_SUCCESS Or PdhVbIsGoodStatus(pdhfmtcv.CStatus) = 0 Then
156 Exit Function
157 End If
158
159 'Get CPU info
160 dblCounterValue = PdhVbGetDoubleCounterValue(hPdhCounterCPU, pdhStatus)
161 m_sCPUTime = CStr(Replace(Format(dblCounterValue, "0.00"), ",", "."))
162
163 lUptime = pdhfmtcv.largeValueHi
164
165 m_dMilliSecs = CDbl(lUptime * 1000)
166 m_iSecs = lUptime Mod 60
167 m_iMins = (lUptime Mod 3600) \ 60
168 m_iHours = (lUptime Mod (3600& * 24)) \ 3600
169 m_iDays = lUptime \ (3600& * 24)
170 Capture = True
171
172 If (GetIdle = True) And (m_Win9x = False) Then
173 'Save CPU idle information
174 Dim PercentIdle As Integer
175 Dim TotalSamples As Long
176 Dim IdleSamples As Long
177
178 TotalSamples = CLng(GetSetting("Uptime", "Idle", "TotalSamples", "0"))
179 IdleSamples = CLng(GetSetting("Uptime", "Idle", "IdleSamples", "0"))
180
181 TotalSamples = TotalSamples + 1
182 If m_sCPUTime = "0.00" Then IdleSamples = IdleSamples + 1
183
184 PercentIdle = CInt((IdleSamples / TotalSamples) * 100)
185 m_iPercentIdle = PercentIdle
186 SaveSetting "Uptime", "Idle", "TotalSamples", CStr(TotalSamples)
187 SaveSetting "Uptime", "Idle", "IdleSamples", CStr(IdleSamples)
188 End If
189
190 Exit Function
191 errhandler:
192 'msgDialog 1, Err.Description, "Error #" & Err.Number & " - Source: " & Err.Source
193 End Function