![]() |
Windows 7 Prozessorauslastung auslesen / Lautstärke regeln
Hallo Delphi Friends!
Ich hab ein Problem. Ich bin vor kurzem von Win XP auf Win 7 umgestiegen. Davor hab ich mir ein Programm geschrieben, welches mir dauerhaft die Prozessorauslastung in einer progressbar anzeigt. Auf Win XP gings. Auf Win 7 nicht mehr :cry: . Genau dasselbe gilt auch für meine Lautstärkeregelung : Die geht seit dem Umstieg auch nicht mehr. Ich bitte um eure Hilfe. |
Re: Windows 7 Prozessorauslastung auslesen
Hi!
Gibt es Fehlermeldungen oder was heißt "geht nicht mehr"? Sind beides 32bit-Systeme? Grüße, Frederic |
Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege
Es ist Win 7 64 Bit.
Davor war es Win XP 32 Bit. Es kommt keine Fehlermeldung, aber in der Progressbar wird nichts mehr angezeigt, trotz unverändertem Code. |
Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege
Hi!
Dann müsstest du uns schon etwas Code zeigen. Allerdings bitte nur zu einem der beiden Probleme - sonst geht es drunter und drüber hier. Du kannst gerne für das andere Programm dann einen anderen Thread aufmachen, aber vllt. versuchst du es erstmal mit einem, vllt. sind es ja ähnliche Ursachen. Grüße, Frederic |
Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege
Zum einem solltest du eine gescheite Fehlerbehandlung einbauen, damit du auch siehst, was nicht stimmt. Zum anderem 32-Bit <> 64-Bit. Und im Soundsubsystem von Windows gab es von XP auf Vista gravierende Änderungen. Siehe dazu das Blog vom verantwortlichen Programmierer:
![]() |
Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege
Hier der Code zum auslesen der Prozessorauslastung :
Delphi-Quellcode:
...
type SYSTEM_BASIC_INFORMATION = packed record dwUnknown1 : DWORD; uKeMaximumIncrement : ULONG; uPageSize : ULONG; uMmNumberOfPhysicalPages: ULONG; uMmLowestPhysicalPage : ULONG; uMmHighestPhysicalPage : ULONG; uAllocationGranularity : ULONG; pLowestUserAddress : POINTER; pMmHighestUserAddress : POINTER; uKeActiveProcessors : POINTER; bKeNumberProcessors : BYTE; bUnknown2 : BYTE; wUnknown3 : WORD; end; SYSTEM_PERFORMANCE_INFORMATION = packed record nIdleTime : INT64; dwSpare : array[0..75]of DWORD; end; SYSTEM_TIME_INFORMATION = packed record nKeBootTime : INT64; nKeSystemTime : INT64; nExpTimeZoneBias : INT64; uCurrentTimeZoneId : ULONG; dwReserved : DWORD; end; ... const SYS_BASIC_INFO = 0; SYS_PERFORMANCE_INFO = 2; SYS_TIME_INFO = 3; ... var nOldIdleTime: Int64 = 0; nOldSystemTime : INT64 = 0; nNewCPUTime : ULONG = 0; ... function GetCPUUsage: Integer; var spi : SYSTEM_PERFORMANCE_INFORMATION; sti : SYSTEM_TIME_INFORMATION; sbi : SYSTEM_BASIC_INFORMATION; begin result := 0; if (NTQuerySystemInformation(SYS_BASIC_INFO, @sbi, sizeof(SYSTEM_BASIC_INFORMATION), 0) = NO_ERROR) then begin if (NTQuerySystemInformation(SYS_TIME_INFO, @sti, sizeof(SYSTEM_TIME_INFORMATION), 0) = NO_ERROR) then if (NTQuerySystemInformation(SYS_PERFORMANCE_INFO, @spi, sizeof(SYSTEM_PERFORMANCE_INFORMATION), 0)= NO_ERROR) then begin if (nOldIdleTime <> 0) then begin nNewCPUTime:= trunc(100-((spi.nIdleTime-nOldIdleTime)/(sti.nKeSystemTime-nOldSystemTime)*100)/sbi.bKeNumberProcessors+0.5); if (nNewCPUTime <> nOldIdleTime) then begin Result := nNewCPUTIME; end; end; nOldIdleTime := spi.nIdleTime; nOldSystemTime := sti.nKeSystemTime; end; end; end; |
Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege
Dann geh den Code doch mal schrittweise durch und guck, wo du rausfliegst bei den if-Bedingungen.
|
Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege
Delphi-Quellcode:
...
function GetCPUUsage: Integer; var spi : SYSTEM_PERFORMANCE_INFORMATION; sti : SYSTEM_TIME_INFORMATION; sbi : SYSTEM_BASIC_INFORMATION; begin result := 0; if (NTQuerySystemInformation(SYS_BASIC_INFO, @sbi, sizeof(SYSTEM_BASIC_INFORMATION), 0) = NO_ERROR) then begin if (NTQuerySystemInformation(SYS_TIME_INFO, @sti, sizeof(SYSTEM_TIME_INFORMATION), 0) = NO_ERROR) then if (NTQuerySystemInformation(SYS_PERFORMANCE_INFO, @spi, sizeof(SYSTEM_PERFORMANCE_INFORMATION), 0)= NO_ERROR) then "<-- Bei dieser Zeile flieg ich raus" begin if (nOldIdleTime <> 0) then begin nNewCPUTime:= trunc(100-((spi.nIdleTime-nOldIdleTime)/(sti.nKeSystemTime-nOldSystemTime)*100)/sbi.bKeNumberProcessors+0.5); if (nNewCPUTime <> nOldIdleTime) then begin ... ... |
Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege
Dann werte doch mal den Rückgabewert aus:
Zitat:
|
Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege
Tut mir leid, dass kann ich aber nicht, weil ich mir den Code, den ich zum Großteil nicht verstehe, aus einem Tutorial rauskopiert hab,
weil ich damals wie heute nicht wusste wie ich das anstellen soll. Meine Frage ist nur : Geht es in Windows 7 oder nicht, wenn ja, wie. (Nur so nebenbei : Ich benutze Delphi 7). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz