AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Windows 7 Prozessorauslastung auslesen / Lautstärke regeln
Thema durchsuchen
Ansicht
Themen-Optionen

Windows 7 Prozessorauslastung auslesen / Lautstärke regeln

Ein Thema von Kapitan Bomba · begonnen am 15. Jan 2010 · letzter Beitrag vom 12. Apr 2012
Antwort Antwort
Seite 1 von 2  1 2      
Kapitan Bomba

Registriert seit: 7. Nov 2008
Ort: Friedrichsdorf
13 Beiträge
 
#1

Windows 7 Prozessorauslastung auslesen / Lautstärke regeln

  Alt 15. Jan 2010, 18:52
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 .
Genau dasselbe gilt auch für meine Lautstärkeregelung : Die geht seit dem Umstieg auch nicht mehr.
Ich bitte um eure Hilfe.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

Re: Windows 7 Prozessorauslastung auslesen

  Alt 15. Jan 2010, 18:54
Hi!

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


Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Kapitan Bomba

Registriert seit: 7. Nov 2008
Ort: Friedrichsdorf
13 Beiträge
 
#3

Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege

  Alt 15. Jan 2010, 18:56
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.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#4

Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege

  Alt 15. Jan 2010, 18:58
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
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege

  Alt 15. Jan 2010, 19:02
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/
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Kapitan Bomba

Registriert seit: 7. Nov 2008
Ort: Friedrichsdorf
13 Beiträge
 
#6

Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege

  Alt 15. Jan 2010, 19:06
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;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege

  Alt 15. Jan 2010, 19:11
Dann geh den Code doch mal schrittweise durch und guck, wo du rausfliegst bei den if-Bedingungen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Kapitan Bomba

Registriert seit: 7. Nov 2008
Ort: Friedrichsdorf
13 Beiträge
 
#8

Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege

  Alt 15. Jan 2010, 19:17
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
... ...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege

  Alt 15. Jan 2010, 19:23
Dann werte doch mal den Rückgabewert aus:
Zitat:
Returns an NTSTATUS success or error code.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Kapitan Bomba

Registriert seit: 7. Nov 2008
Ort: Friedrichsdorf
13 Beiträge
 
#10

Re: Windows 7 Prozessorauslastung auslesen / Lautstärke rege

  Alt 15. Jan 2010, 19:29
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).
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:27 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