1 秒毎に CPU 使用率を取得します。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]
コード:
#N88BASIC
Declare Function NtQuerySystemInformation Lib "ntdll.dll" (dwInfoType As DWord,lpStructure As VoidPtr,dwSize As DWord,dwReserved As DWord) As DWord
Type SYSTEM_PERFORMANCE_INFORMATION
IdleTime As LARGE_INTEGER
KernelTime As LARGE_INTEGER
UserTime As LARGE_INTEGER
Reserved1[2] As LARGE_INTEGER
Reserved2 As LARGE_INTEGER
End Type
Dim OldSPI As SYSTEM_PERFORMANCE_INFORMATION
Dim SPI As SYSTEM_PERFORMANCE_INFORMATION
Dim OldUserTime As QWord
Dim OldKernelTime As QWord
Dim OldIdleTime As QWord
Dim UserTime As QWord
Dim KernelTime As QWord
Dim IdleTime As QWord
Dim ResultUserTime As QWord
Dim ResultKernelTime As QWord
Dim ResultIdleTime As QWord
Dim ResultSystemTime As QWord
Dim CPUUsage As QWord
Dim Message[256] As Byte
Do
NtQuerySystemInformation(8,VarPtr(OldSPI),Len(OldSPI),NULL)
Sleep(1000)
NtQuerySystemInformation(8,VarPtr(SPI),Len(SPI),NULL)
memcpy(VarPtr(OldUserTime),VarPtr(OldSPI.UserTime),8)
memcpy(VarPtr(OldKernelTime),VarPtr(OldSPI.KernelTime),8)
memcpy(VarPtr(OldIdleTime),VarPtr(OldSPI.IdleTime),8)
memcpy(VarPtr(UserTime),VarPtr(SPI.UserTime),8)
memcpy(VarPtr(KernelTime),VarPtr(SPI.KernelTime),8)
memcpy(VarPtr(IdleTime),VarPtr(SPI.IdleTime),8)
ResultUserTime=OldUserTime-UserTime
ResultKernelTime=OldKernelTime-KernelTime
ResultIdleTime=OldIdleTime-IdleTime
ResultSystemTime=ResultUserTime+ResultKernelTime
CPUUsage=(ResultSystemTime-ResultIdleTime)*100/ResultSystemTime
lstrcpy(Message,"CPU 使用率: ")
lstrcat(Message,Str$(CPUUsage))
lstrcat(Message," %")
SetWindowText(_PromptSys_hWnd,Message)
Loop
件名の通り Windows 2000 / XP 用です。
暇があれば 9x 系にも対応したいと思います。
1 秒毎に CPU 使用率を取得します。
[hide] [code] #N88BASIC
Declare Function NtQuerySystemInformation Lib "ntdll.dll" (dwInfoType As DWord,lpStructure As VoidPtr,dwSize As DWord,dwReserved As DWord) As DWord
Type SYSTEM_PERFORMANCE_INFORMATION
IdleTime As LARGE_INTEGER KernelTime As LARGE_INTEGER UserTime As LARGE_INTEGER Reserved1[2] As LARGE_INTEGER Reserved2 As LARGE_INTEGER
End Type
Dim OldSPI As SYSTEM_PERFORMANCE_INFORMATION Dim SPI As SYSTEM_PERFORMANCE_INFORMATION Dim OldUserTime As QWord Dim OldKernelTime As QWord Dim OldIdleTime As QWord Dim UserTime As QWord Dim KernelTime As QWord Dim IdleTime As QWord Dim ResultUserTime As QWord Dim ResultKernelTime As QWord Dim ResultIdleTime As QWord Dim ResultSystemTime As QWord Dim CPUUsage As QWord Dim Message[256] As Byte
Do
NtQuerySystemInformation(8,VarPtr(OldSPI),Len(OldSPI),NULL) Sleep(1000) NtQuerySystemInformation(8,VarPtr(SPI),Len(SPI),NULL) memcpy(VarPtr(OldUserTime),VarPtr(OldSPI.UserTime),8) memcpy(VarPtr(OldKernelTime),VarPtr(OldSPI.KernelTime),8) memcpy(VarPtr(OldIdleTime),VarPtr(OldSPI.IdleTime),8) memcpy(VarPtr(UserTime),VarPtr(SPI.UserTime),8) memcpy(VarPtr(KernelTime),VarPtr(SPI.KernelTime),8) memcpy(VarPtr(IdleTime),VarPtr(SPI.IdleTime),8) ResultUserTime=OldUserTime-UserTime ResultKernelTime=OldKernelTime-KernelTime ResultIdleTime=OldIdleTime-IdleTime ResultSystemTime=ResultUserTime+ResultKernelTime CPUUsage=(ResultSystemTime-ResultIdleTime)*100/ResultSystemTime lstrcpy(Message,"CPU 使用率: ") lstrcat(Message,Str$(CPUUsage)) lstrcat(Message," %") SetWindowText(_PromptSys_hWnd,Message)
Loop
[/code] [/hide] 件名の通り Windows 2000 / XP 用です。 暇があれば 9x 系にも対応したいと思います。
|