Einzelnen Beitrag anzeigen

jDallmeyer

Registriert seit: 29. Nov 2005
34 Beiträge
 
#27

Re: energiesparplan unter vista ändern

  Alt 9. Mär 2009, 10:21
Danke für die Antwort.

Ich habe versucht, den im MSDN vorgeschriebenen Datentyp UCHAR zu verwenden, doch es entstehen dann immer AccessViolations. Ich habe daher auch andere Typen getestet, doch der einzige, der keinen Fehler produziert, ist TGUID. In einer TGUID kann aber nicht die gesuchte Information stehen. Ich habe eine Weile das Netz durchsucht, um herauszufinden, wie ich mit UCHAR umzugehen habe. Meine Frage hierzu: UCHAR ist ein vorzeichenloses 8-Bit Integer. Daraus sollte sich sehr leicht ein Buchstabe ableiten lassen. Aber dann doch nur EIN Buchstabe, denn ein EIN UCHAR sollte auch nur Platz für EINEN Buchstaben sein. Die verwendete Funktion sollte aber einen String liefern, der aus mehreren Buchstaben besteht. Ich habe daher auch versucht, ein Array von UCHARS zu verwenden, bei dem die Größe des Arrays identisch zur Rückgabegröße der Funktion ist.

Bitte schau nochmal drüber. Die gezeigte Prozedur verabschiedet sich mit einer AccessViolation. Verwende ich anstelle von UCHAR TGUID, bekomme ich zwar keinen Fehler, dafür aber nichts wirklich brauchbares.

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var res, size: DWORD;
    tmp,tmp2: UCHAR; //TGUID

    function getSel:integer; [...]
begin
  size := 0;
  active_guid := StringToGuid(lb1.Items[getSel()]);
  res := PowerReadFriendlyName(0, @active_guid, nil, nil, @tmp, @size);

  if res = ERROR_MORE_DATA then // Nach dem ersten Aufruf wird size richtig gesetzt.
    res := PowerReadFriendlyName(0, @active_guid, nil, nil, @tmp2, @size)
  else showmessage('Fehler');

  if res = ERROR_SUCCESS then begin
    lb1.Items.Add(inttostr(size));
// lb1.Items.Add(GUIDToString(tmp2));
  end
  else
    lb1.Items.Add('Fehler -> '+inttostr(size));
end;
  Mit Zitat antworten Zitat