Re: energiesparplan unter vista ändern
Liste der Anhänge anzeigen (Anzahl: 1)
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 |
Re: energiesparplan unter vista ändern
Für Betriebssysteme < Windows Vista vielleicht noch ne kleine Abfrage einbauen. Is' hübscher als ne AV. :stupid:
|
Re: energiesparplan unter vista ändern
Zitat:
Einfach mal einen Blick in die MSDN-Library werfen: PowerEnumerate |
Re: energiesparplan unter vista ändern
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:
habe ich irgendwo einen gedanken fehler gemacht?{$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; gruss olli |
Re: energiesparplan unter vista ändern
Du hast die Funktion so wie ich das gesehen habe falsch übersetzt:
Delphi-Quellcode:
Bei ValueMinimum übergibst du dann einfach einen Zeiger auf deine DWORD-Variable und schon gehts.
function PowerReadValueMin(RootPowerKey: HKEY;
const SubGroupOfPowerSettingsGuid: PGUID; const PowerSettingGuid: PGUID; ValueMinimum: PDWORD): DWORD; stdcall; external PWR_PROF; 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; |
Re: energiesparplan unter vista ändern
[quote="Mr_G"]Du hast die Funktion so wie ich das gesehen habe falsch übersetzt:
Delphi-Quellcode:
Bei ValueMinimum übergibst du dann einfach einen Zeiger auf deine DWORD-Variable und schon gehts.
function PowerReadValueMin(RootPowerKey: HKEY;
const SubGroupOfPowerSettingsGuid: PGUID; const PowerSettingGuid: PGUID; ValueMinimum: PDWORD): DWORD; stdcall; external PWR_PROF; hmm bei mir geht das immer noch nicht aufrufen tue ich die Funktion mit
Delphi-Quellcode:
das ist doch richtig oder muss ich da was noch beachten?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); . . . . gruss olli |
Re: energiesparplan unter vista ändern
Jetzt muss ich wieder meine Glaskugel rausholen :glaskugel:
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. |
Re: energiesparplan unter vista ändern
Moin,
was ich damit meine ist das ich immer noch kein ergebniss in meinem Label bz. meiner Edit angezeigt bekomme!
Delphi-Quellcode:
Wie ich die funktion nun aufrufe weißt du nun, habe es auch geändert was du geschrieben hattest mit dem PDWord
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;
Delphi-Quellcode:
Nur was meinst du damit:?
function PowerReadValueMin(RootPowerKey: HKEY;
const SubGroupOfPowerSettingsGuid: PGUID; const PowerSettingGuid: PGUID; ValueMinimum: PDWORD): DWORD; stdcall; external PWR_PROF; Zitat:
gruss olli |
Re: energiesparplan unter vista ändern
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:
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:
|
Re: energiesparplan unter vista ändern
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:
ich weiß das die Funktion noch etwas unaufgeräumt aussieht aber ich habe vieles getestet{$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; Hoffe mir kann einer Helfen gruss olli |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 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