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!
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