2002.Jul.03
Presented by kouta_y
感想等は掲示板、苦情はメールへ。
' ウィンドウメッセージ Public Const WM_MOUSEMOVE As Long = &H200 ' マウスが移動した Public Const WM_LBUTTONUP As Long = &H202 ' マウス左ボタンが解放された Public Const WM_RBUTTONUP As Long = &H205 ' マウス右ボタンが解放された ' アイコンの設定 Private Const NIM_ADD As Long = &H0 ' アイコン追加 Private Const NIM_MODIFY As Long = &H1 ' アイコン修正 Private Const NIM_DELETE As Long = &H2 ' アイコン削除 ' フラグ Public Const NIF_MESSAGE As Long = &H1 ' メッセージを受け取る Public Const NIF_ICON As Long = &H2 ' アイコンを表示 Public Const NIF_TIP As Long = &H4 ' ツールチップを表示 ' ルートキー Private Const HKEY_DYN_DATA As Long = &H80000006 ' HKEY_DYN_DATAキー ' サブキー Private Const STARTSTAT As String = "PerfStats\StartStat" ' 計測開始 Private Const STOPSTAT As String = "PerfStats\StopStat" ' 計測停止 Private Const STATDATA As String = "PerfStats\StatData" ' 現在値 Private Const CPUUSAGE As String = "Kernel\CPUUsage" ' 使用率キー Private Const KEY_QUERY_VALUE As Long = &H1 ' 読み取り ' アイコンデータ構造体 Public Type NOTIFYICONDATA cbSize As Long ' 構造体のサイズ hwnd As Long ' ウィンドウハンドル uID As Long ' アイコンID(任意) uFlags As Long ' フラグ uCallbackMessage As Long ' 通知するメッセージ hIcon As Long ' アイコンハンドル szTip As String * 64 ' ツールチップ End Type ' システムトレイのアイコン操作 Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" ( _ ByVal dwMessage As Long, _ lpData As NOTIFYICONDATA _ ) As Long ' レジストリキー開く Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" ( _ ByVal hKey As Long, _ ByVal lpSubKey As String, _ ByVal ulOptions As Long, _ ByVal samDesired As Long, _ phkResult As Long _ ) As Long ' レジストリ値取得 Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" ( _ ByVal hKey As Long, _ ByVal lpValueName As String, _ ByVal lpReserved As Long, _ lpType As Long, _ lpData As Any, _ lpcbData As Long _ ) As Long ' レジストリキー閉じる Public Declare Function RegCloseKey Lib "advapi32.dll" ( _ ByVal hKey As Long _ ) As Long |
' アイコン追加 Public Function IconAdd(nid As NOTIFYICONDATA) As Long IconAdd = Shell_NotifyIcon(NIM_ADD, nid) End Function ' アイコン編集 Public Function IconModify(nid As NOTIFYICONDATA) As Long IconModify = Shell_NotifyIcon(NIM_MODIFY, nid) End Function ' アイコン削除 Public Function IconDelete(nid As NOTIFYICONDATA) As Long IconDelete = Shell_NotifyIcon(NIM_DELETE, nid) End Function |
' 使用率計測開始(コンストラクタ) Public Function StartCPUUsage() As Long Dim hKey As Long Dim Usage As Long ' 計測開始 If RegOpenKeyEx(HKEY_DYN_DATA, STARTSTAT, 0, KEY_QUERY_VALUE, hKey) = 0 Then Call RegQueryValueEx(hKey, CPUUSAGE, 0, ByVal 0, Usage, Len(Usage)) Call RegCloseKey(hKey) End If End Function ' CPUの使用率 Public Function GetCPUUsage() As Long Dim hKey As Long Dim Usage As Long ' 現在の値を読む If RegOpenKeyEx(HKEY_DYN_DATA, STATDATA, 0, KEY_QUERY_VALUE, hKey) = 0 Then Call RegQueryValueEx(hKey, CPUUSAGE, 0, ByVal 0, Usage, Len(Usage)) GetCPUUsage = Usage Call RegCloseKey(hKey) End If End Function ' 使用率取得の終了(デストラクタ) Public Function EndCPUUsage() As Long Dim hKey As Long Dim Usage As Long ' 計測停止 If RegOpenKeyEx(HKEY_DYN_DATA, STOPSTAT, 0, KEY_QUERY_VALUE, hKey) = 0 Then Call RegQueryValueEx(hKey, CPUUSAGE, 0, ByVal 0, Usage, Len(Usage)) Call RegCloseKey(hKey) End If End Function |
Form1 | |
(オブジェクト名) | Form1 |
Caption | 監視中! |
BorderStyle | 1 - 固定(実線) |
MaxButton | False |
MinButton | False |
Timer1 | |
(オブジェクト名) | Timer1 |
Interval | 1000 |
Label1 | |
(オブジェクト名) | Label1 |
Caption | なし |
Private Sub Form_Load() ' アイコンの設定 With nid .cbSize = Len(nid) .hwnd = Me.hwnd .hIcon = Me.Icon ' アイコンハンドルはこれでOK .uID = 1 .uCallbackMessage = WM_MOUSEMOVE ' MouseMoveに通知する ' .szTip = "" .uFlags = NIF_ICON Or _ NIF_MESSAGE Or _ NIF_TIP ' アイコン表示&メッセージ通知&ツールチップ表示あり End With Me.Visible = 0 ' フォームは隠す Call IconAdd(nid) ' タスクトレイへ! Call StartCPUUsage ' 計測開始 End Sub |
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim msg As Long ' 通知メッセージが来た! msg = X \ Screen.TwipsPerPixelX ' メッセージに翻訳する(ピクセル単位にする) Select Case msg Case WM_LBUTTONUP: ' 左クリックされた Me.Visible = 1 ' フォームを表示する Me.WindowState = 0 Case WM_RBUTTONUP: ' 右クリックされた ' End Select End Sub |
Private Sub Timer1_Timer() Dim tip As String tip = "使用率は " & GetCPUUsage & " %" & vbNullChar Label1.Caption = tip nid.szTip = "CPU監視中!" & vbCrLf & tip ' 2段にする Call IconModify(nid) ' アイコンの編集 End Sub |