Delphi-PRAXiS
Seite 10 von 10   « Erste     8910   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Das Handle ist ungültig (https://www.delphipraxis.net/196216-das-handle-ist-ungueltig.html)

KodeZwerg 6. Mai 2018 20:25

AW: Das Handle ist ungültig
 
Delphi-Quellcode:
function GetEnvVarValue(const VarName: string): string;
var
  BufSize: Integer; // buffer size required for value
begin
  // Get required buffer size (inc. terminal #0)
  BufSize := GetEnvironmentVariable(PChar(VarName), nil, 0);
  if BufSize > 0 then
  begin
    // Read env var value into result string
    SetLength(Result, BufSize - 1);
    GetEnvironmentVariable(PChar(VarName),
      PChar(Result), BufSize);
  end
  else
    // No such environment variable
    Result := '';
end;

procedure TForm1.Button1(Sender: TObject);
begin
  ShowMessage(GetEnvVarValue('SystemRoot'));
end;
hoffe es hilft!

edit
Delphi-Quellcode:
function ExpandEnvironment(const strValue: string): string;
var
  chrResult: array[0..1023] of Char;
  wrdReturn: DWORD;
begin
  wrdReturn := ExpandEnvironmentStrings(PChar(strValue), chrResult, 1024);
  if wrdReturn = 0 then
    Result := strValue
  else
  begin
    Result := Trim(chrResult);
  end;
end;

EWeiss 6. Mai 2018 20:29

AW: Das Handle ist ungültig
 
Diese Funktion beinhaltet die API ExpandEnvironmentStrings doch schon warum mehr schreiben als nötig?
Dann kann ich auch diese von HolgerX verwenden das funktioniert. ;)

PS:
Danke habe die zweite variante mit dem Array versucht
Ok funktioniert es wäre ein Fehler wenn die Rückgabe 0 ist.

so ist es richtig.

Delphi-Quellcode:
procedure TAudioVolume.LoadIconPathfromResource(IconPath: PWideChar);
var
  Module: HModule;
  Filename: WideString;
  lpDest: array[0..MAX_PATH] of WideChar;
  StrID: string;
  ID: DWORD;
begin

  // Remove First @ Letter
  Filename := MidStr(IconPath, 2, Length(IconPath));
  // Extract ID
  StrID := MidStr(Filename, Length(Filename) - 2, 4);
  ID := StrToInt(StrID);
  // Remove ID from Path
  Filename := LeftStr(Filename, Length(Filename) - 5);

  FillChar(lpDest, SizeOf(lpDest), 0);
  if ExpandEnvironmentStrings(PWideChar(Filename), lpDest, Length(lpDest)) <> 0 then
  begin
    // Load the Lib
    Module := LoadLibraryExW(lpDest, 0, LOAD_LIBRARY_AS_DATAFILE);
    // check for error
    if Module <> INVALID_HANDLE_VALUE then
    begin
      Icon := TIcon.Create;
      Icon.Handle := LoadIcon(Module, MakeIntResource(ID));
      if Module <> 0 then
        FreeLibrary(Module);
    end;
  end;
end;
Manchmal wirklich :wall:

gruss

KodeZwerg 6. Mai 2018 20:54

AW: Das Handle ist ungültig
 
Delphi-Quellcode:
ExpandEnvironmentStrings(PWideChar(Filename), lpDest, Length(lpDest))
sicher das Length(lpDest) ausreicht? in meinem Beispiel wird von einem maximal wert ausgegangen und dann mit trim() gekürzt.

EWeiss 6. Mai 2018 20:58

AW: Das Handle ist ungültig
 
Zitat:

Zitat von KodeZwerg (Beitrag 1401456)
Delphi-Quellcode:
ExpandEnvironmentStrings(PWideChar(Filename), lpDest, Length(lpDest))
sicher das Length(lpDest) ausreicht? in meinem Beispiel wird von einem maximal wert ausgegangen und dann mit trim() gekürzt.

Du glaubst das ein Pfad länger als 260 Zeichen ist?
Es heißt ja nicht umsonst MAX_PATH oder?

gruss

KodeZwerg 6. Mai 2018 21:03

AW: Das Handle ist ungültig
 
Ich bin der Meinung EnvironmentStrings unterliegen nicht diesem Limit, ein Test kann ja nicht Schaden.
Zitat:

The maximum size of a user-defined environment variable is 32,767 characters

EWeiss 6. Mai 2018 21:10

AW: Das Handle ist ungültig
 
Zitat:

Zitat von KodeZwerg (Beitrag 1401459)
Ich bin der Meinung EnvironmentStrings unterliegen nicht diesem Limit, ein Test kann ja nicht Schaden.

Es geht nicht um die EnvironmentStrings sondern um den Pfad in gesamten.
Ok spätestens wenn es kracht was ich nicht glaube kann man es immer noch ändern.

OK.. Hier geht es jetzt weiter da wir das Thema mittlerweile um längen überschritten haben was das eigentlich Thema "Das Handle ist ungültig" betrifft.

gruss

Dalai 6. Mai 2018 21:16

AW: Das Handle ist ungültig
 
Meine Funktion zu ExpandEnvironmentStrings sieht so aus (ich glaub, die hab ich schonmal gepostet):
Delphi-Quellcode:
function ExpandEnvStr(const sInput: string): string;
const
  MAXSIZE = 32768; // laut PSDK sind 32k das Maximum
begin
  SetLength(Result, MAXSIZE);
  SetLength(Result,
            ExpandEnvironmentStrings(PChar(sInput), @Result[1], Length(Result))-1);
            //-1 um abschließendes #0 zu verwerfen
end;
Grüße
Dalai

EWeiss 6. Mai 2018 21:20

AW: Das Handle ist ungültig
 
Zitat:

Zitat von Dalai (Beitrag 1401462)
Meine Funktion zu ExpandEnvironmentStrings sieht so aus (ich glaub, die hab ich schonmal gepostet):
Delphi-Quellcode:
function ExpandEnvStr(const sInput: string): string;
const
  MAXSIZE = 32768; // laut PSDK sind 32k das Maximum
begin
  SetLength(Result, MAXSIZE);
  SetLength(Result,
            ExpandEnvironmentStrings(PChar(sInput), @Result[1], Length(Result))-1);
            //-1 um abschließendes #0 zu verwerfen
end;
Grüße
Dalai

Ok. Werde es berichtigen dann sind alle zufrieden.. selbst wenn es meine auch tut ;)
Mein letzter Post hier der Rest bitte hier weiter das Ergebnis könnt ihr hier laden.

Es nimmt sonst kein Ende ;) Danke!
Die 100 muss ich nicht unbedingt haben.


gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 Uhr.
Seite 10 von 10   « Erste     8910   

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