Buffersize ermitteln

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Buffersize ermitteln

Beitrag von PBZecke »

Hallo!

Ich habe lange nichts mehr mit PB gemacht, und sehe deshalb den Wald vor lauter Bäumen nicht! Folgender Code funktioniert (PB4):

Code: Alles auswählen

Structure SYSTEM_POWER_CAPABILITIES
  PowerButtonPresent.b
  SleepButtonPresent.b
  LidPresent.b
  SystemS1.b
  SystemS2.b
  SystemS3.b
  SystemS4.b
  SystemS5.b
  HiberFilePresent.b
  FullWake.b
  VideoDimPresent.b
  ApmPresent.b
  UpsPresent.b
  ThermalControl.b
  ProcessorThrottle.b
  ProcessorMinThrottle.b
  ProcessorMaxThrottle.b
  spare2.b
  DiskSpinDown.b
  spare3.b
  SystemBatteriesPresent.b
  BatteriesAreShortTerm.b
  BatteryScale.l
  AcOnLineWake.l
  SoftLidWake.l
  RtcWake.l
  MinDeviceWakeState.l
  DefaultLowLatencyWake.l
EndStructure

#SystemPowerCapabilities = 4
  


Define SYSINF.SYSTEM_POWER_CAPABILITIES


If OpenLibrary(0, "PowrProf.DLL")
  *F = GetFunction(0, "CallNtPowerInformation")
  If *F
    CallFunctionFast(*F, #SystemPowerCapabilities, 0, 0, @SYSINF,  100)
    Debug SYSINF\SystemBatteriesPresent
    Debug SYSINF\HiberFilePresent
    Debug sysinf\ProcessorMaxThrottle
  EndIf
  
  CloseLibrary(0)
EndIf
jedoch ist die Zeile

Code: Alles auswählen

CallFunctionFast(*F, #SystemPowerCapabilities, 0, 0, @SYSINF,  100)
nicht ganz sauber da ich den OuputBuffer einfach mit 100 angebe. Wie ermittle ich die korrekte Größe des Buffers? SizeOf liefert eine falsche Größe bzw ich setze es falsch ein!
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Friedhelm
Beiträge: 43
Registriert: 29.08.2004 08:50

Beitrag von Friedhelm »

Versucht man ihr mit

Code: Alles auswählen

Structure SYSTEM_POWER_CAPABILITIES 
  PowerButtonPresent.b 
  SleepButtonPresent.b 
  LidPresent.b 
  SystemS1.b 
  SystemS2.b 
  SystemS3.b 
  SystemS4.b 
  SystemS5.b 
  HiberFilePresent.b 
  FullWake.b 
  VideoDimPresent.b 
  ApmPresent.b 
  UpsPresent.b 
  ThermalControl.b 
  ProcessorThrottle.b 
  ProcessorMinThrottle.b 
  ProcessorMaxThrottle.b 
  spare2.b 
  DiskSpinDown.b 
  spare3.b 
  SystemBatteriesPresent.b 
  BatteriesAreShortTerm.b 
  BatteryScale.l 
  AcOnLineWake.l 
  SoftLidWake.l 
  RtcWake.l 
  MinDeviceWakeState.l 
  DefaultLowLatencyWake.l 
EndStructure 

#SystemPowerCapabilities = 4 
  


Define SYSINF.SYSTEM_POWER_CAPABILITIES 

Mesisch.s=Space(100)


If OpenLibrary(0, "PowrProf.DLL") 
  *F = GetFunction(0, "CallNtPowerInformation") 
  If *F 
    CallFunctionFast(*F, #SystemPowerCapabilities, 0, 0, @SYSINF,SizeOf(SYSINF)) 
    
    Debug SYSINF\SystemBatteriesPresent 
    Debug SYSINF\HiberFilePresent 
    Debug sysinf\ProcessorMaxThrottle 
  EndIf 
  
  CloseLibrary(0) 
EndIf 
mit freundlichen Gruß
Friedhelm
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

Hmm...

Code: Alles auswählen

CallFunctionFast(*F, #SystemPowerCapabilities, 0, 0, @SYSINF,SizeOf(SYSINF))
hatte ich auch probiert, und geht nicht!

Und was soll

Code: Alles auswählen

Mesisch.s=Space(100)
:roll:

Trotzdem danke!
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Die Struktur ist falsch.
typedef struct {
BOOLEAN PowerButtonPresent;
BOOLEAN SleepButtonPresent;
BOOLEAN LidPresent;
BOOLEAN SystemS1;
BOOLEAN SystemS2;
BOOLEAN SystemS3;
BOOLEAN SystemS4;
BOOLEAN SystemS5;
BOOLEAN HiberFilePresent;
BOOLEAN FullWake;
BOOLEAN VideoDimPresent;
BOOLEAN ApmPresent;
BOOLEAN UpsPresent;
BOOquoteLEAN ThermalControl;
BOOLEAN ProcessorThrottle;
UCHAR ProcessorMinThrottle;
UCHAR ProcessorMaxThrottle;
UCHAR spare2[4];
BOOLEAN DiskSpinDown;
UCHAR spare3[8];
BOOLEAN SystemBatteriesPresent;
BOOLEAN BatteriesAreShortTerm;
BATTERY_REPORTING_SCALE BatteryScale[3];
SYSTEM_POWER_STATE AcOnLineWake;
SYSTEM_POWER_STATE SoftLidWake;
SYSTEM_POWER_STATE RtcWake;
SYSTEM_POWER_STATE MinDeviceWakeState;
SYSTEM_POWER_STATE DefaultLowLatencyWake;

} SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES;
Friedhelm
Beiträge: 43
Registriert: 29.08.2004 08:50

Beitrag von Friedhelm »

PBZecke hat geschrieben:
Und was soll

Code: Alles auswählen

Mesisch.s=Space(100)
:roll:

Trotzdem danke!

Hatte vergessen Vergessen zu löschen!. :oops: :oops: 8)

Mfg
Friedhelm
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

hallodri hat geschrieben:Die Struktur ist falsch.
OK, aber wie setze ich das richtig in PureBasic um?
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

spare2.b[4] ,spare3.b[8]
usw .
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

Ja, stimmt! SizeOf liefert schon die richtige Größe des Buffers, und der ist eben wegen der falschen Structure zu klein, was das ganze eben Scheitern ließ!

Danke, erledigt! :)
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Antworten