Seite 1 von 5

Festplattenaktivität feststellen ?

Verfasst: 01.01.2012 14:29
von Bisonte
Hallo.

Wie kann ich unter Windows feststellen (systemweit), ob gerade Datentransfer von irgendeinem Laufwerk im Gange ist ?

Geht um die Simulation einer Anzeige wie die HD-Lampe am PC Gehäuse...

Re: Festplattenaktivität feststellen ?

Verfasst: 01.01.2012 14:32
von RSBasic
Du kannst mit folgendem Code ermitteln, ob eine Datei hinzugefügt, entfernt oder geändert wurde: http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Ist es das, was du suchst?

Re: Festplattenaktivität feststellen ?

Verfasst: 01.01.2012 14:44
von Bisonte
Danke.

Kommt dem schon recht nahe was ich suche, aber leider ist es nicht dieses.

Mein Tower steht auf dem Boden, so dass ich die LaufwerksLED nicht sehen kann, und wollte nun diese LED
mit einer LED (Scroll Lock) auf der Tastatur verknüpfeln... so dass ich dort sehen kann, ob gerade Festplattenaktivität
ansteht oder nicht.

Mit dem Snippet ist "nur" eine Dateiüberwachung möglich, also wenn z.B. eine Gigabytegrosse Datei kopiert wird, würde die
LED nur kurz aufblitzen und nicht durchgehend leuchten (so wie halt die GehäuseLED).

Re: Festplattenaktivität feststellen ?

Verfasst: 01.01.2012 14:54
von RSBasic
Ich habe mal gegoogelt und habe nur diesen Thread gefunden: http://www.purebasic.fr/german/viewtopi ... 16&t=12492
Der Code von And51 hat ebenfalls das Problem, dass nur kurz "anleuchtet". Der Code von Hell zeigt mir immer "Zugriff" an, obwohl ich nichts mache. Falls du seinen Code testen möchtest, aber die DLL-Datei nicht hast, kannst du diese hier herunterladen: http://www.rsbasic.de/temp/TVICPORT.DLL

Re: Festplattenaktivität feststellen ?

Verfasst: 01.01.2012 15:50
von Bisonte
Schade, der Code läuft auch nicht. Mag aber daran liegen, das diese DLL den IDE Bereich scannen kann, aber kein SATA ?
Ausserdem ... woher nimmt man die Port Adresse... (in den docs der dll stehts als parameter).
Die von den Controllern im Gerätemanager sind es anscheinend nicht.

Aber gut, muss ich wohl ein laaaaaaaaaaaaaaaaanges kabel nehmen und nen Lötkolben ;)

Re: Festplattenaktivität feststellen ?

Verfasst: 01.01.2012 15:53
von RSBasic
Hm, ansonsten mal selber googlen, beispielsweise in CPP-Foren o.ä. Vielleicht gibt es eine vorhandene WMI-Lösung o.ä.

Re: Festplattenaktivität feststellen ?

Verfasst: 01.01.2012 16:51
von Bisonte
da tippt man sich bei google die finger wund ;)

aber es scheint mit Disk Performance Counters was zu tun zu haben, somit eventuell mit PDH.dll machbar,
allerdings find ich nirgends ein Query... aber ich such noch ;)

Re: Festplattenaktivität feststellen ?

Verfasst: 01.01.2012 18:57
von Kiffi
Frohes Neues! :D

hier mal ein WMI-Schnippselchen (benötigt COMate):

Code: Alles auswählen

IncludePath "[DeinPfadZuCOMatePLUS-PB4-50]"
XIncludeFile "comateplus.pbi"

EnableExplicit

Procedure.s ShowHdActivity(Computer.s)
  
  Protected objWMIService.COMateObject
  Protected objItem.COMateObject 
  Protected colItems.COMateEnumObject 
  Protected ReturnValue.s
  
  objWMIService = COMate_GetObject("winmgmts:\\" + Computer + "\root\cimv2", "") 
  
  If objWMIService 
    
    colItems  = objWMIService\CreateEnumeration("ExecQuery('SELECT * FROM Win32_PerfFormattedData_PerfDisk_PhysicalDisk')") 
    
    If colItems  
      
      objItem = colItems\GetNextObject() 
      
      While objItem
        
        If objItem\GetStringProperty("Name") = "_Total"
          
          ReturnValue + "DiskReadBytesPersec: "  + objItem\GetStringProperty("DiskReadBytesPersec") + #CRLF$
          ReturnValue + "DiskTransfersPersec: "  + objItem\GetStringProperty("DiskTransfersPersec") + #CRLF$
          ReturnValue + "DiskWriteBytesPersec: " + objItem\GetStringProperty("DiskWriteBytesPersec") + #CRLF$
          ReturnValue + "PercentIdleTime: "      + objItem\GetStringProperty("PercentIdleTime") + #CRLF$
          
        EndIf
        
        objItem\Release() 
        objItem = colItems\GetNextObject() 
        
      Wend 
      
      colItems\Release() 
      
    EndIf 
    
    objWMIService\Release() 
    
  EndIf 
  
  ProcedureReturn ReturnValue
  
EndProcedure

#Window = 0
#EditorGadget = 0
#WindowTimer = 0

OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 300, "HD-Activity")
EditorGadget(#EditorGadget, 0, 0, WindowWidth(#Window), WindowHeight(#Window))
AddWindowTimer(#Window, #WindowTimer, 500)
StickyWindow(#Window, #True)

Repeat
  
  Select WaitWindowEvent()
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window
          Break
      EndSelect
      
    Case #PB_Event_Timer
      Select EventTimer()
        Case #WindowTimer
          SetGadgetText(#EditorGadget, ShowHdActivity("."))
      EndSelect
      
  EndSelect
  
ForEver
Obiges zeigt IMO die Aktivität aller Festplatten an.

Grüße ... Kiffi

Re: Festplattenaktivität feststellen ?

Verfasst: 01.01.2012 19:21
von NicknameFJ
Bisonte hat geschrieben: aber es scheint mit Disk Performance Counters was zu tun zu haben, somit eventuell mit PDH.dll machbar,
allerdings find ich nirgends ein Query... aber ich such noch ;)
Im englischen Forum hat einer so ein Programm mit DriveGLeam.dll gemacht. Leider nur als *.exe und nicht als Source verfügbar.

http://www.purebasic.fr/english/viewtop ... drivegleam

Grüße NicknameFJ

[EDIT]
Hm, die dll scheint es nicht frei zu geben. Lt. Aussage des Autors im obigen LINK ist die DLL ein Projekt eines Freundes der die DLL in C geschrieben hat. Habe auch auf die Schnelle mit Google keinen Downloadlink zu der DLL finden könne. Schade.
[ENDEDIT]

Re: Festplattenaktivität feststellen ?

Verfasst: 01.01.2012 20:34
von Sicro
Bisonte hat geschrieben:Aber gut, muss ich wohl ein laaaaaaaaaaaaaaaaanges kabel nehmen und nen Lötkolben ;)
Demzufolge gehen ich davon aus, dass dir auch Fertiglösungen recht sind.
Das Programm DriveLED von O&O zeigt die LEDs in dem TrayIcon-Bereich an.
Mit folgendem Link kommst du noch an die ältere Version, die noch Freeware ist:
http://www.wintotal.de/softwarearchiv/?rb=2054&id=1424