コード:
#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