AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi energiesparplan unter vista ändern
Thema durchsuchen
Ansicht
Themen-Optionen

energiesparplan unter vista ändern

Ein Thema von Admirandis · begonnen am 12. Okt 2008 · letzter Beitrag vom 19. Jun 2009
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
Oliver1983

Registriert seit: 8. Mär 2006
Ort: Hamburg
43 Beiträge
 
Delphi XE Starter
 
#31

Re: energiesparplan unter vista ändern

  Alt 15. Jun 2009, 22:36
Hi,

ich habe mal das Programm etwas "aufgeräumt" bzw. etwas schöner gemacht Icons sowie ein TrayIcon ist nun auch drin mit Popup Menü
nun stehe ich aber vor einem Problem ich würde auch gerne die einzelheiten des EnergieSchemes auflisten, also die Einstellung die gespeichert wurden anzeigen lassen!

Die GUID's habe ich mittels in einer CMD Box mit "powercfg /Q" Befehl ausgelesen, aber wie erstelle ich nun richtig die Functionen im Delphi Programm?

Anbei das Programm auf wunsch auch der QuellCode
dazu sei gesagt die JediVCL und die LMD Tools müssen vorhanden sein

um jede hilfe sei gedankt

gruss olli
Angehängte Dateien
Dateityp: exe vista_powermanager_187.exe (868,0 KB, 23x aufgerufen)
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#32

Re: energiesparplan unter vista ändern

  Alt 15. Jun 2009, 22:48
Für Betriebssysteme < Windows Vista vielleicht noch ne kleine Abfrage einbauen. Is' hübscher als ne AV.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#33

Re: energiesparplan unter vista ändern

  Alt 16. Jun 2009, 02:03
Zitat von Oliver1983:
...nun stehe ich aber vor einem Problem ich würde auch gerne die einzelheiten des EnergieSchemes auflisten, also die Einstellung die gespeichert wurden anzeigen lassen!
Ich weiß zwar nicht genau was du meinst aber aus einem Bauchgefühl heraus würde ich sagen der Parameter SubGroupOfPowerSettingsGuid der Funktion PowerEnumerate ist dein Freund
Einfach mal einen Blick in die MSDN-Library werfen: MSDN-Library durchsuchenPowerEnumerate
Jan
  Mit Zitat antworten Zitat
Oliver1983

Registriert seit: 8. Mär 2006
Ort: Hamburg
43 Beiträge
 
Delphi XE Starter
 
#34

Re: energiesparplan unter vista ändern

  Alt 16. Jun 2009, 21:39
So habe mal weiter gemacht bisher hat alles gut funktioniert nun komme ich aber nicht weiter!!!

Wenn ich nun den Minimum wert der CPU anzeigen lassen will mit dieser Function

bekomme ich nichts zurück bzw. mein Label bleibt leer

hier das wesentliche:
Delphi-Quellcode:

{$EXTERNALSYM PowerReadValueMin}
function PowerReadValueMin (RootPowerKey: HKEY;
  const SubGroupOfPowerSettingGuid: PGUID; const PowerSettingGuid: PGUID;
  Buffer: PUCHAR):
  DWORD; stdcall; external PWR_PROF;

implementation

{$R *.dfm}



function TForm1.getMinValueFromsubGroupSetting(sub_guid:TGUID ; setting_guid:TGUID):string;
var res, size: DWORD;
    b: PWideChar;
begin
  size := 0;

  PowerReadValueMin (0, @sub_guid, @setting_guid, nil);
  GetMem(b, size);
  // Nach dem ersten Aufruf wird size richtig gesetzt.
  res := PowerReadValueMin (0, @sub_guid, @setting_guid, Pointer(b));
  if res = ERROR_SUCCESS then begin
    result := b;
  end
  else
    result := b;

  FreeMem(b);
end;
habe ich irgendwo einen gedanken fehler gemacht?

gruss olli
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#35

Re: energiesparplan unter vista ändern

  Alt 16. Jun 2009, 22:11
Du hast die Funktion so wie ich das gesehen habe falsch übersetzt:
Delphi-Quellcode:
function PowerReadValueMin(RootPowerKey: HKEY;
  const SubGroupOfPowerSettingsGuid: PGUID; const PowerSettingGuid: PGUID;
  ValueMinimum: PDWORD): DWORD; stdcall; external PWR_PROF;
Bei ValueMinimum übergibst du dann einfach einen Zeiger auf deine DWORD-Variable und schon gehts.

Ich würde aber auch nochmal einen Blick auf deinen Quelltext werfen:
Delphi-Quellcode:
PowerReadValueMin (0, @sub_guid, @setting_guid, nil);
  PowerReadValueMin (0, @sub_guid, @setting_guid, nil);
  GetMem(b, size);
  // Nach dem ersten Aufruf wird size richtig gesetzt.
  {size wurde nie an die Funktion übergeben... wer soll da was richtig setzen?} 
  res := PowerReadValueMin (0, @sub_guid, @setting_guid, Pointer(b));
  if res = ERROR_SUCCESS then begin
    result := b;
  end
  else
    {wozu der Else-Zweig wenn hier das Selbe passiert?} 
    result := b;
Jan
  Mit Zitat antworten Zitat
Oliver1983

Registriert seit: 8. Mär 2006
Ort: Hamburg
43 Beiträge
 
Delphi XE Starter
 
#36

Re: energiesparplan unter vista ändern

  Alt 16. Jun 2009, 22:26
[quote="Mr_G"]Du hast die Funktion so wie ich das gesehen habe falsch übersetzt:
Delphi-Quellcode:
function PowerReadValueMin(RootPowerKey: HKEY;
  const SubGroupOfPowerSettingsGuid: PGUID; const PowerSettingGuid: PGUID;
  ValueMinimum: PDWORD): DWORD; stdcall; external PWR_PROF;
Bei ValueMinimum übergibst du dann einfach einen Zeiger auf deine DWORD-Variable und schon gehts.

hmm bei mir geht das immer noch nicht

aufrufen tue ich die Funktion mit
Delphi-Quellcode:

procedure TForm1.PS_getActiveClick(Sender: TObject);
var res, res2: DWORD;
    tmp: PGUID;
    tmp2 : TGUID;
    actindex: integer;
    s : string;
    tray_balloon_title, tray_balloon_hint: string;
begin
  res := PowerGetActiveScheme(0, @tmp);
  if res = ERROR_SUCCESS then
   begin
    label1.caption := 'AKTIV: '+getNameFromPowerScheme(PGuidToTGuid(tmp));
    label2.caption := getDescriptionFromPowerScheme(PGuidToTGuid(tmp));
    label3.Caption := form1.getNameFromsubGroup(PGuidToTGuid(tmp),GUID_PROCESSOR_SETTINGS_SUBGROUP);
    label4.Caption := form1.getNameFromsubGroupSetting(PGuidToTGuid(tmp),GUID_PROCESSOR_SETTINGS_SUBGROUP,GUID_CPU_Minimum);
// label5.Caption := form1.getMinValueFromsubGroupSetting(PGuidToTGuid(tmp),GUID_PROCESSOR_SETTINGS_SUBGROUP,GUID_CPU_Minimum);
    edit1.text := getMinValueFromsubGroupSetting(GUID_PROCESSOR_SETTINGS_SUBGROUP,GUID_CPU_Minimum);

.
.
.
.
das ist doch richtig oder muss ich da was noch beachten?

gruss olli
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#37

Re: energiesparplan unter vista ändern

  Alt 16. Jun 2009, 23:23
Jetzt muss ich wieder meine Glaskugel rausholen
Was geht nicht? Und was soll mir der Code sagen? Ich seh da nur wie du deine eigene Funktion aufrufst.

P.S.: Mir läuft ein kalter Schauer bei der Funktion PGuidToTGuid über den Rücken. Hab mir gerade mal die Implementation angesehen. Ihr solltet euch unbedingt nocheinmal den Umgang mit Pointern ansehen.
Jan
  Mit Zitat antworten Zitat
Oliver1983

Registriert seit: 8. Mär 2006
Ort: Hamburg
43 Beiträge
 
Delphi XE Starter
 
#38

Re: energiesparplan unter vista ändern

  Alt 17. Jun 2009, 05:05
Moin,

was ich damit meine ist das ich immer noch kein ergebniss in meinem Label bz. meiner Edit angezeigt bekomme!

Delphi-Quellcode:
function TForm1.getMinValueFromsubGroupSetting(sub_guid:TGUID ; setting_guid:TGUID):string;
var res, size: DWORD;
    b: PWideChar;
begin
  size := 0;

  PowerReadValueMin (0, @sub_guid, @setting_guid, nil);
  GetMem(b, size);
  // Nach dem ersten Aufruf wird size richtig gesetzt.
  res := PowerReadValueMin (0, @sub_guid, @setting_guid, Pointer(b));
  if res = ERROR_SUCCESS then begin
    result := b;
  end
  else
    result := b;

  FreeMem(b);
end;
Wie ich die funktion nun aufrufe weißt du nun, habe es auch geändert was du geschrieben hattest mit dem PDWord

Delphi-Quellcode:
function PowerReadValueMin(RootPowerKey: HKEY;
  const SubGroupOfPowerSettingsGuid: PGUID; const PowerSettingGuid: PGUID;
  ValueMinimum: PDWORD): DWORD; stdcall; external PWR_PROF;
Nur was meinst du damit
Zitat:

Bei ValueMinimum übergibst du dann einfach einen Zeiger auf deine DWORD-Variable und schon gehts.

gruss olli
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#39

Re: energiesparplan unter vista ändern

  Alt 17. Jun 2009, 11:38
Ohne dir zu Nahe treten zu wollen: Du weißt nicht wirklich was du machst, oder? Schau dir doch bitte mal ein Grundlagentutorial an!
Zitat von Oliver1983:
Nur was meinst du damit
Ich meine was ich sagte:
Delphi-Quellcode:
function TForm1.getMinValueFromsubGroupSetting(sub_guid, setting_guid: TGUID): String;
var val: DWORD;
begin
  if PowerReadValueMin(0, @sub_guid, @setting_guid, @val) = ERROR_SUCCESS then
    Result := IntToStr(val)
  else
    Result := 'Fehler...';
end;
Zitat von Mr_G:
Ihr solltet euch unbedingt nocheinmal den Umgang mit Pointern ansehen.
Jan
  Mit Zitat antworten Zitat
Oliver1983

Registriert seit: 8. Mär 2006
Ort: Hamburg
43 Beiträge
 
Delphi XE Starter
 
#40

Re: energiesparplan unter vista ändern

  Alt 19. Jun 2009, 06:12
hi,

super habe jetzt einiges rausgefunden, und klappt auch so wie es soll, nun habe ich aber wieder ein problem und zwar bei PowerWriteFriendlyName Function link
bei
__in UCHAR *Buffer,
__in DWORD BufferSize

Buffersize ist eigentlich klar

aber was muss ich bei Buffer übergeben ich bin der meinung entweder PWideString oder PWideChar

Delphi-Quellcode:

{$EXTERNALSYM PowerWriteFriendlyName}
function PowerWriteFriendlyName(RootPowerKey: HKEY; const SchemeGuid: PGUID;
  const SubGroupOfPowerSettingGuid: PGUID; const PowerSettingGuid: PGUID;
  Buffer: PUChar; BufferSize: PDWORD):
  DWORD; stdcall; external PWR_PROF;


function TForm1.setNameToPowerScheme(guid:TGUID; fname: WideString ):string;
var
 res, size: DWORD;
 pfname: PWideChar;
begin
  size := 512;
  StringToWideChar(fname, Pfname, size);


  GetMem(pfname, size);
  //PowerWriteFriendlyName(0, @guid, nil, nil, Pointer(fname), @size);

  res := PowerWriteFriendlyName(0, @guid, nil, nil, Pointer(pfname), @size);
  if res = ERROR_SUCCESS then begin
    result := 'Name geändert';
  end
  else
    result := 'fehler';

 FreeMem(pfname);
end;
ich weiß das die Funktion noch etwas unaufgeräumt aussieht aber ich habe vieles getestet

Hoffe mir kann einer Helfen

gruss olli
Oliver
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 20: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