Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows 7 Prozessorauslastung auslesen / Lautstärke regeln (https://www.delphipraxis.net/146213-windows-7-prozessorauslastung-auslesen-lautstaerke-regeln.html)

Kapitan Bomba 15. Jan 2010 17:52


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.

fkerber 15. Jan 2010 17:54

Re: Windows 7 Prozessorauslastung auslesen
 
Hi!

Gibt es Fehlermeldungen oder was heißt "geht nicht mehr"?
Sind beides 32bit-Systeme?


Grüße, Frederic

Kapitan Bomba 15. Jan 2010 17:56

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.

fkerber 15. Jan 2010 17:58

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

Luckie 15. Jan 2010 18:02

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: http://blogs.msdn.com/larryosterman/

Kapitan Bomba 15. Jan 2010 18:06

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;

Luckie 15. Jan 2010 18:11

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.

Kapitan Bomba 15. Jan 2010 18:17

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

Luckie 15. Jan 2010 18:23

Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege
 
Dann werte doch mal den Rückgabewert aus:
Zitat:

Returns an NTSTATUS success or error code.

Kapitan Bomba 15. Jan 2010 18:29

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 02:07 Uhr.
Seite 1 von 2  1 2      

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