Software hard disk activity monitor (like hardware LED)

Just starting out? Need help? Post your questions and find answers here.
dige
Addict
Addict
Posts: 1391
Joined: Wed Apr 30, 2003 8:15 am
Location: Germany
Contact:

Re: Software hard disk activity monitor (like hardware LED)

Post by dige »

Code: Select all

;http://pbasic.spb.ru/phpBB2/viewtopic.php?t=1066
; Author: kvitaliy 2010
; PureBasic v 4.4

#IOCTL_DISK_PERFORMANCE     = $70020;

Structure DISK_PERFORMANCE
  BytesRead.q;
  BytesWritten.q;
  ReadTime.q;
  WriteTime.q;
  IdleTime.q;
  ReadCount.l;
  WriteCount.l;
  QueueDepth.l;
  SplitCount.l;
  QueryTime.l;
  StorageDeviceNumber.l;
  StorageManagerName.l[8];
EndStructure
SystemPath.s=Space(255)
Result=GetSystemDirectory_(SystemPath.s,255)
Global hdh
;Procedure ScrollLock-blinken
Procedure SetScrollLED(VKkey.l, bState.b)
  
  Dim keyState.b(256)
  GetKeyboardState_(@keyState(0))
  
  If (bState = #True And keyState(VKkey) = 0) Or (bState = #False And keyState(VKkey) = 1)
    keybd_event_(VKkey, 0, #KEYEVENTF_EXTENDEDKEY, 0)
    keybd_event_(VKkey, 0, #KEYEVENTF_EXTENDEDKEY + #KEYEVENTF_KEYUP, 0)
    keyState(VKkey) = bState
    SetKeyboardState_(@keyState(0))
  EndIf
  
EndProcedure     

Procedure OpenPhysDrive(CurrentDrive.l)
  hdh = CreateFile_("\\.\PhysicalDrive" + Str(CurrentDrive),0,0,0,#OPEN_EXISTING, 0, 0)
  ProcedureReturn hdh
EndProcedure

   ;Prüft, ob eine physische Festplatte im System nach 0 (neben 1 Disc, etc.) 
If OpenPhysDrive(0) = #INVALID_HANDLE_VALUE
  End ; es gibt keinen Ausstieg aus dem Programm-CD
EndIf
   ; Programm-Icon in der Taskleiste wird aus der System-DLL übernommen
IdIcon1=ExtractIcon_(0,SystemPath+"\SetupAPI.dll",29)     
IdIcon2=ExtractIcon_(0,SystemPath+"\SetupAPI.dll",8)   
   
dp.DISK_PERFORMANCE
     
Window_Form1=OpenWindow(0,80,80,100,100,"HDD",#PB_Window_Invisible)

CreatePopupMenu(0)
MenuItem(1, "Über")
MenuItem(2, "Beenden")

AddSysTrayIcon(1, WindowID(0),IdIcon2) ;
SysTrayIconToolTip(1, "HDD Monitor")

Repeat
  
  EventID = WaitWindowEvent(10)
  
  Result=DeviceIoControl_(hdh, #IOCTL_DISK_PERFORMANCE, 0, 0, @dp, SizeOf(DISK_PERFORMANCE), @lBytesReturned, 0);

  ; Wenn sich Dauer des Lesen verändert
  If dp\ReadTime <> OldReadTime.q; Wenn gelesen wird - LED-Anzeige-Symbol blinken lassen
    OldReadTime = dp\ReadTime
    If Not flags
      SetScrollLED(#VK_SCROLL,#True)
      ChangeSysTrayIcon(1,IdIcon2)
      flags = #True
    EndIf
  Else
    If flags
      SetScrollLED(#VK_SCROLL,#False)
      ChangeSysTrayIcon(1,IdIcon1)
      flags = #Null
    EndIf
  EndIf
  
  ; Wenn sich Dauer des Screiben verändert
  If dp\WriteTime<>OldWriteTime.q ;Wenn geschrieben wird - LED-Anzeige-Symbol blinken lassen
    OldWriteTime= dp\WriteTime
    If Not flags
      SetScrollLED(#VK_SCROLL,#True)
      ChangeSysTrayIcon(1,IdIcon2)
      flags = #True
    EndIf
  Else
    If flags
      SetScrollLED(#VK_SCROLL,#False)   
      ChangeSysTrayIcon(1,IdIcon1)
      flags = #Null
    EndIf
  EndIf
  Delay (100)
  
  If ElapsedMilliseconds() > TimeOut
    If TimeOut
      SysTrayIconToolTip(1, "HDD Monitor R:" + Str((dp\ReadCount - Count_Read)*12) + " (" + StrU(dp\BytesRead/$100000, #pb_quad) + "MB) | W:" + Str((dp\WriteCount - Count_Write)*12) + " (" + StrU(dp\BytesWritten/$100000, #pb_quad) + "MB) [Req/min]")
    EndIf
    Count_Read = dp\ReadCount
    Count_Write = dp\WriteCount
    TimeOut = ElapsedMilliseconds() + 5000
  EndIf
  
  If EventID = #PB_Event_SysTray
    Select EventType()
      Case #PB_EventType_RightClick ;Die Verarbeitung der rechten Maustaste
        DisplayPopupMenu(0, WindowID(0)) ;zeige Popup-Menü
    EndSelect
  EndIf
  
  If EventID = #PB_Event_Menu
    Select EventMenu()
      Case 2
        Quit = 1
      Case 1
        MessageRequester("HDD", "HDD Activity LED", #PB_MessageRequester_Ok)
    EndSelect
  EndIf
  If EventID = #PB_Event_CloseWindow  ; Beenden Sie das Programm
    Quit = 1
  EndIf
  
Until Quit = 1
SetScrollLED(#VK_SCROLL,#False) 
"Daddy, I'll run faster, then it is not so far..."
User avatar
viiartz
User
User
Posts: 70
Joined: Tue Mar 28, 2006 2:00 am

Re: Software hard disk activity monitor (like hardware LED)

Post by viiartz »

I appreciate the help but is there an English example, or at least English comments? :?

Update:
Found this in English for those of you playing at home! http://www.purebasic.fr/english/viewtop ... 12&t=42675
Last edited by viiartz on Sat Jan 26, 2013 3:27 pm, edited 1 time in total.
Thanks,
ViiArtz
SFSxOI
Addict
Addict
Posts: 2970
Joined: Sat Dec 31, 2005 5:24 pm
Location: Where ya would never look.....

Re: Software hard disk activity monitor (like hardware LED)

Post by SFSxOI »

see the posts from dige and NicknameFJ above, and also http://translate.google.com/# if you need to translate a web page or words, for example > http://translate.google.com/translate?s ... start%3D20 or http://translate.google.com/translate?s ... start%3D20
The advantage of a 64 bit operating system over a 32 bit operating system comes down to only being twice the headache.
User avatar
viiartz
User
User
Posts: 70
Joined: Tue Mar 28, 2006 2:00 am

Re: Software hard disk activity monitor (like hardware LED)

Post by viiartz »

SFSxOI wrote:see the posts from dige and NicknameFJ above, and also http://translate.google.com/# if you need to translate a web page or words, for example > http://translate.google.com/translate?s ... start%3D20 or http://translate.google.com/translate?s ... start%3D20
Thanks SFSxOI
Thanks,
ViiArtz
Post Reply