Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Windows: Laufzeit statt Uptime (https://www.delphipraxis.net/156871-windows-laufzeit-statt-uptime.html)

Samweis78 18. Dez 2010 09:24

Windows: Laufzeit statt Uptime
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute,

ich hätte da gern mal ein Problem.
Und zwar will ich in einem Programm zeigen, wie lange der PC schon an ist. Dafür hab ich dann auch recht fix GetTickCount gefunden und alles schien gut.
Allerdings ist mir jetzt aufgefallen, dass das gar nicht das ist, was ich brauche, denn mit GetTickCount bekommt man ja "die Zeit, die seit dem letzten Systemstart vergangen ist", ich brauche aber "die Zeit, die das System tatsächlich seit dem letzten Systemstart aktiv war".
Mit anderen Worten: War der PC zwischenzeitlich im Ruhezustand (oder wahrscheinlich auch im Standby), kann ich das nicht berücksichtigen ... will ich aber!

Ich hab auch das Richtige gefunden... allerdings nicht, wie ich da per Delphi ran komme.
Schaut mal in den Anhang. In Win7 (wahrscheinlich auch Vista?) aber nicht in XP wird dieser Wert im Taskmanager angezeigt.

Ich tret da etwas auf der Stelle... weil delphi und laufzeit zu googeln ist etwas... naja... zu ergiebig ^^

Wär heiss, wenn ja jemand einen Tipp hätte ;)
-Sam

himitsu 18. Dez 2010 09:28

AW: Windows: Laufzeit statt Uptime
 
Du könntest auf die Messages reagieren, welche vor und nach dem Standby/Ruhezustand versendet werden und dieses in deinen GetTickCount-Startwert mit einrechnen.

Samweis78 18. Dez 2010 09:42

AW: Windows: Laufzeit statt Uptime
 
Tach himitsu,

okay, das wär eine Möglichkeit... find ich aber nich optimal. Das Programm läuft ja vielleicht nicht immer... (auch wenn es im Endeffekt darauf ausgelegt ist)...

Schöner wär es, auf einen Wert des Systems zurückzugreifen...

Überlege schon, wie ich an den Speicherbereich rankomme, gabs nich mal ein Programm, das mir in Formularanwendungen sowas über dessen Elemente verriet? Aber dann komm ich auch nur an den Wert ran, den der TaskManager bereitstellt, und der läuft nicht immer... und unter XP hilft mir das auch nicht.
...Aber das geht schon in Richtung reverse engineering (oder so ähnlich) und sprengt auf jeden Fall den Rahmen, in dem ich das Progrämmli entwickle.
... dann ist das mit den Messages auf jeden Fall besser ;)

Aber ich lass die Frage mal noch offen, vielleicht hat noch jemand einen Einfall?

-Sam

jfheins 18. Dez 2010 10:54

AW: Windows: Laufzeit statt Uptime
 
Okay, mal schauen:

1. http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Zitat:

If you need a higher resolution timer, use a multimedia timer or a high-resolution timer.
To obtain the time elapsed since the computer was started, retrieve the System Up Time counter in the performance data in the registry key HKEY_PERFORMANCE_DATA. The value returned is an 8-byte value. For more information, see Performance Counters.
To obtain the time the system has spent in the working state since it was started, use the QueryUnbiasedInterruptTime function.
Das letzte hört sich doch ganz interessant an. Geht aber nur unter Windows 7 ( http://msdn.microsoft.com/en-us/libr...07(VS.85).aspx )
Und du musst es wahrscheinlich manuell einbinden.

Samweis78 18. Dez 2010 12:40

AW: Windows: Laufzeit statt Uptime
 
Hallo,

ääääähm... oi weh ^^...
Da scheint das ja wirklich mehr oder weniger in der Registry drin zu stehen... aber das Auslegen is wohl nich so easy gemacht...

Hmm, ich fürchte, wie ich das machen werde, kann ich nicht mehr vor Weihnachten entscheiden ^^ und wahrscheinlich wirds dann doch das Abfangen der OS-Messages, um für alle Windows-Versionen nur einmal programmieren zu müssen.

Habt Dank für die Hilfe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz